【问题标题】:Increase Minimum Stack Overflow Size in Mac Common Lisp 5.0在 Mac Common Lisp 5.0 中增加最小堆栈溢出大小
【发布时间】:2010-10-03 08:04:06
【问题描述】:
我对 Lisp 比较陌生(我只知道非常基础的知识),我目前正在尝试运行由 David Cope 创建的算法组合程序。它在 MCL 5.0 中运行,我不断收到以下错误:
进程播放中的错误:值堆栈上的堆栈溢出。
要全局增加堆栈空间,请增加*minimum-stack-overflow-size*
有谁知道我将使用什么函数来增加堆栈溢出大小以及如何为我的计算机计算最佳堆栈溢出大小?我在具有 512 MB RAM 的旧 Powerbook 上运行 MCL。
感谢您的宝贵时间,
艾迪
【问题讨论】:
标签:
lisp
stack-overflow
common-lisp
mcl
【解决方案1】:
最初的内存选项是用 ResEdit 编辑的。
还可以使用 SAVE-APPLICATION 函数并使用 :MEMORY-OPTIONS 关键字来指定各种值。这在 MCL 参考手册中有描述。此函数保存一个新的 MCL 应用程序。通常一个人启动 vanilla MCL,设置各种选项,加载一些库,然后保存一个新应用程序。然后在开发过程中使用这个新应用程序。
必要的堆栈大小取决于您要运行的程序。
如果发生堆栈溢出,在 MCL 中,您可以在许多情况下继续使用更大的堆栈。只需选择正确的重启选项即可。
【解决方案2】:
好像说只需要修改特殊变量*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))) 或类似名称来启用尾调用消除。