当我尝试执行以下递归函数时,我在 clisp 中收到“-Program stack overflow”提示,我相信该函数会返回列表中最常见的元素:
(defun greater-member (lst)
(cond ((null (cdr lst))
(cons (car lst) (count-if #'(lambda (x) (eql x (car lst))) lst)))
((>= (count-if #'(lambda (x) (eql x (car lst))) lst)
(count-if #'(lambda (x) (eql x (car (remove (car lst) lst)))) lst))
(greater-member (remove (car (remove (car lst) lst)) lst)))
(t (greater-member (remove (car lst) lst)))))
例如 greater-number 应该返回如下:
>(greater-number '(a a a b b b b c))
(b . 4)
请问,溢出的原因是什么?我已经摆脱了所有的小语法错误 通过在 clisp 中重复执行 greater-number - 该函数似乎符合逻辑。
最佳答案
我现在意识到我的错误了。
查看我的 null 测试,而不是
(null (cdr lst))
我应该有
(null (remove (car lst) lst))
以便删除冗余的、较少出现的唯一元素。
关于recursion - 执行递归lisp函数时堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12670616/