是否有命令停止Common Lisp中的解释器?

Hal*_*own 19 lisp common-lisp

我正在寻找一个表达式,它将导致解释器在被评估时退出.

我发现了许多特定于实现的但没有在HyperSpec中,我想知道是否有任何我没有看到规范中定义的.我发现它(quit)被CLISP和SLIME (exit)都认可,并且只有CLISP才能识别,但是我找不到任何参考其中任何一个的文档.

Rai*_*wig 19

由于大多数Lisps将退出函数导入CL-USER,因此在不知道实现特定包的情况下,CL-USER :: QUIT是一个很好的猜测.

(cl-user::quit)
Run Code Online (Sandbox Code Playgroud)

请注意两个冒号,因为不需要从CL-USER包导出QUIT.


dan*_*lei 18

据我所知,这不是规范所涵盖的,您将不得不使用特定于实现的解决方案,或者尝试查看是否有人已经编写了一个简单的退出lib(或在CLiki上启动一个).

如果您只关心交互式使用,那么,qSLIME将始终做正确的事情.否则,您可以使用如下读取时间条件:

(defun my-quit ()
  #+sbcl (sb-ext:quit)
  #+clisp (ext:exit)
  #+ccl (ccl:quit)
  #+allegro (excl:exit)) ;; and so on ...
Run Code Online (Sandbox Code Playgroud)

#+检查,如果有以下符号*features*.如果不是,则以下表格将被视为空格.(也有#-相反的情况).

  • 这是一个谷歌代码搜索,指向SLIME在以下每种情况下使用的内容:http://google.com/codesearch?q =%22defimplementation+quit-lisp%22 (3认同)

Xac*_*ach 6

退出CL环境没有标准方法.要了解如何在您正在使用的实现中执行此操作,请阅读其文档.

在sbcl中,(sb-ext:quit)会做到这一点.对于clisp,它是(ext:exit).该命令的clisp文档位于http://clisp.sourceforge.net/impnotes.html#quit


Hal*_*own 1

有一个名为 shutdown-it-down 的 ASDF 库,它提供了一个quit功能,只需提供常见 CL 实现的案例即可工作。