在过去的几个小时里,我一直在努力解决这个问题,在互联网上寻求帮助,但我似乎仍然无法弄清楚。
问题很简单:
编写一个递归程序(在 lisp 中),它接受一个列表并返回列表中 'a 原子的数量。
从我所做的研究来看,LISP 似乎有一个隐含的计数器,如果你只做 (+ 1) 它会在哪里跟踪?这是关了吗?
请帮忙,我很沮丧...
在过去的几个小时里,我一直在努力解决这个问题,在互联网上寻求帮助,但我似乎仍然无法弄清楚。
问题很简单:
编写一个递归程序(在 lisp 中),它接受一个列表并返回列表中 'a 原子的数量。
从我所做的研究来看,LISP 似乎有一个隐含的计数器,如果你只做 (+ 1) 它会在哪里跟踪?这是关了吗?
请帮忙,我很沮丧...
您只需要在参数中携带一个计数器。我一直没有使用 LISP,但只是一个简单的 (+ counterName 1) 作为参数应该跟踪。不过不要忘记给它一个起始值。
这里的想法不是使用全局变量,而是将计数保持在“堆栈中”。
这是一个方案解决方案。我相信您可以将其转换为您正在使用的任何 Lisp 方言:
(define (count-a lst)
(cond ((null? lst) 0)
((eq? (car lst) 'a) (+ (count-a (cdr lst)) 1))
(else (count-a (cdr lst)))))
如果这对你来说还不够 DRY,这里有一个更精简的版本:
(define (count-a lst)
(if (null? lst) 0
(+ (count-a (cdr lst)) (if (eq? (car lst) 'a) 1 0))))