跟踪递归函数中的全局变量

时间:2012-10-05 03:38:29

标签: lisp

过去几个小时我一直在努力解决这个问题,在互联网上寻求帮助,我似乎无法弄明白。

问题很简单:

编写一个递归程序(在lisp中),它接受一个列表并返回列表中'a atoms的数量。

从我所做的研究来看,似乎LISP中有一个隐含的计数器,如果你只是做(+ 1)它会跟踪?这是关闭的吗?

请帮忙,我很沮丧......

2 个答案:

答案 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))))