cat*_*ory 1 lisp stack-overflow recursion clisp common-lisp
当我尝试执行以下递归函数时,我在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)))))
Run Code Online (Sandbox Code Playgroud)
例如,more-number应返回如下:
>(greater-number '(a a a b b b b c))
(b . 4)
Run Code Online (Sandbox Code Playgroud)
请问,造成溢出的原因是什么?我通过在clisp中重复执行更大的数字来摆脱所有的小语法错误-该函数似乎逻辑上保持.
我现在意识到自己的错误.
看着我的空测试,而不是
(null (cdr lst))
Run Code Online (Sandbox Code Playgroud)
我应该
(null (remove (car lst) lst))
Run Code Online (Sandbox Code Playgroud)
这样就可以消除冗余的,较少发生的独特元素.