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