执行递归lisp函数时堆栈溢出

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中重复执行更大的数字来摆脱所有的小语法错误-该函数似乎逻辑上保持.

cat*_*ory 6

我现在意识到自己的错误.

看着我的测试,而不是

(null (cdr lst)) 
Run Code Online (Sandbox Code Playgroud)

我应该

(null (remove (car lst) lst))
Run Code Online (Sandbox Code Playgroud)

这样就可以消除冗余的,较少发生的独特元素.