如何计算列表中元素的数量?
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)
这是我的代码。它应该计算列表中元素的数量,但它却打印出一个零,即使列表包含某些内容。
(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)