我对Lisp比较陌生(我只知道它的基础知识)而且我正在尝试运行由David Cope创建的算法组合程序。它在MCL 5.0中运行,我不断收到以下错误:
进程播放错误:堆栈溢出堆栈。 要全局增加堆栈空间,请增加
*minimum-stack-overflow-size*
有谁知道我会用什么函数来增加堆栈溢出大小以及如何为我的计算机计算最佳堆栈溢出大小?我在一台带有512 MB RAM的旧Powerbook上运行MCL。
感谢您的时间,
埃迪
答案 0 :(得分:1)
最初使用ResEdit编辑内存选项。
还可以使用SAVE-APPLICATION功能并使用:MEMORY-OPTIONS关键字指定各种值。这在MCL参考手册中有所描述。此功能保存新的MCL应用程序。通常,一个启动vanilla MCL,设置各种选项,加载一些库,然后保存一个新的应用程序。然后在开发过程中使用这个新应用程序。
必要的堆栈大小取决于您要运行的程序。
如果发生堆栈溢出,在MCL中,在许多情况下可以继续使用更大的堆栈。只需选择正确的重启选项即可。
答案 1 :(得分:0)
似乎说你只需要修改特殊变量*minimum-stack-overflow-size*
。当您处于REPL(CL-USER>
提示符或类似提示符)时,通过评估其名称来检查此变量:
CL-USER> *minimum-stack-overflow-size*
然后,使用setf
将其设置为更大的值(1234567只是一个占位符):
CL-USER> (setf *minimum-stack-overflow-size* 1234567)
然而,这可能不是真正的问题。我不太了解MCL,但如果要运行的程序使用依赖于此类优化的尾递归函数,则可能需要(declaim (optimize (speed 3) (safety 0)))
或类似启用尾调用消除。