【发布时间】:2019-10-30 07:23:27
【问题描述】:
所以我必须在 lisp 的列表中计算一个单词(或字符,更具体地说)的出现次数。例如输入:
(freq 'c '(a c c c c (c c c e)))
应该产生 7 个计数,因为 list 参数中有 7 个 c。我拥有的代码如下,但它不起作用。我可以计算作为基本元素的 4 个 c 和子列表中的 3 个 c,但我不知道如何将它们加在一起。另外,我只使用原始数据类型。
(defun freq (a L)
(cond
((null L) 0)
((listp (car L)) ( (freq a (car L))) ((freq a (cdr L))))
((eq a (car L))(+ 1 (freq a (cdr L))))
(t ((freq a (cdr L))))))
【问题讨论】:
-
在你的第二个
cond条件下,不应该添加那些递归调用 -
如何添加递归调用?很抱歉这个基本问题,但我在这里几乎是从头开始自学......就像,我没有分配任何变量,那么我将如何编写这种加法的数学表达式?
-
只是
(+ <call1> <call2>) -
所以我会设置第二个条件条件(因为我的原始代码中只有一个条件)并执行 (+
) 命令? -
不,我指的是
cond中的第二个条件分支——((listp (car L)) (+ (freq ..) (freq ...)))
标签: recursion lisp common-lisp