所以这是我的代码。它应该计算列表中元素的数量,但是即使列表包含某些内容,它也会打印零。
(defun my-list (listA)
(setq count 0)
(loop for i in listA
if(null i)
count
else
do (setq count(+ count 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)