リスト内の最も一般的な要素を返す次の再帰関数を実行しようとすると、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 '(a a a b b b b c))
(b . 4)
オーバーフローの原因は何ですか?clisp でgreater-numberを繰り返し実行することで、小さな構文エラーをすべて取り除きました。関数は論理的に保持されているようです。