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

How do to count the number of elements in a list?

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

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

我看到你已经标记了函数式编程,但你尝试做的解决方案远非函数式。

一种实用的方法是进行案例分析。基本情况是一个空列表。答案是 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)