如何计算列表中的元素数量?

时间:2015-04-27 12:33:26

标签: lisp

所以这是我的代码。它应该计算列表中元素的数量,但是即使列表包含某些内容,它也会打印零。

(defun my-list (listA)
    (setq count 0)
    (loop for i in listA
    if(null i)
        count
    else
    do (setq count(+ count 1))))

1 个答案:

答案 0 :(得分:2)

我发现你已经标记了函数式编程,但是你尝试做的解决方案远非功能性。

功能性方法是进行案例分析。基本情况是一个空列表。答案是0.默认情况是列表的rest加上一个的长度。例如。 (my-length '(1)) ==> (1+ (my-length '()) ==> (1+ 0) ==> 1

就是这样。它适用于(my-length '(1 2 3)) ==> (1+ (1+ (1+ 0))) ==> 3

以来的任何长度列表

修改

count在哪里定义? setq更新现有绑定。也许您应该使用let进行本地绑定。同样在loop中你可以创建变量:

(loop :for count :from 0 
      :for element :in listA
      :finally (return count))

loop实际上可以计算,总结和更多,所以这是一个更好的方法:

(loop :for element :in listA
      :counting t)