-1

在过去的几个小时里,我一直在努力解决这个问题,在互联网上寻求帮助,但我似乎仍然无法弄清楚。

问题很简单:

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

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

请帮忙,我很沮丧...

4

2 回答 2

0

您只需要在参数中携带一个计数器。我一直没有使用 LISP,但只是一个简单的 (+ counterName 1) 作为参数应该跟踪。不过不要忘记给它一个起始值。

于 2012-10-05T03:53:02.603 回答
0

这里的想法不是使用全局变量,而是将计数保持在“堆栈中”。

这是一个方案解决方案。我相信您可以将其转换为您正在使用的任何 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))))
于 2012-10-05T04:22:55.560 回答