如果这已在其他地方得到回答,我提前道歉,但是我似乎无法找到我遇到的问题的详细解释。这也是我在SO上的第一篇文章......
基本上这是一个家庭作业,但是,我不是在寻找解决方案,因为我已经在 SO 上看到了一个可行的解决方案。坦率地说,我想实现自己的解决方案,这样我就可以学习,因为我非常有兴趣让我的头脑围绕 lisp / 方案。这个想法是计算列表中有多少个 0 或任何元素/原子,然后显示/返回。
我确信通过查看代码很容易看出我的逻辑在做什么。我遇到的问题是每次递归时都会增加 totalZeros 变量。(+ 5 myNum) 肯定会在 myNum 上加 5。因此,为什么 (+ 1 totalZeros) 似乎不起作用?当我单步调试调试器时,我可以看到 totalZeros 变量永远不会改变。它总是为零...
(define (countZeros aList)
(define totalZeros 0)
(define (iterator aList)
(let ((listSize (length aList)))
(if (> listSize 0)
(let ((tempVar (car aList)))
(when (eq? tempVar 0)
(+ 1 totalZeros))
(iterator (cdr aList)))
0)))
(let ((listSize (length aList)))
(when (> listSize 0)
(iterator aList))
(display totalZeros)))