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

标签 recursion lisp common-lisp stack-overflow clisp

当我尝试执行以下递归函数时,我在 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/

相关文章:

javascript - 是否有支持递归之类的javascript模板引擎?

javascript - 我怎样才能找到两个或多个整数的GCD,javascript?没有方法

lisp - 元循环评估器,实现环境

Scheme 中的继承类

output - LISP - 字节数组的快速输出

java - 按顺序检索二叉搜索树中的元素

javascript - 使用递归函数按顺序进行多个ajax请求,并在所有请求完成后执行回调函数

arrays - 在 LISP 中访问数组的索引

optimization - 在 Lisp 中,使用 let* 还是 setf 更惯用?

list - 将列表作为函数参数传递并从函数返回列表