我正在寻找一个表达式,它会导致解释器在被评估时退出。
我在HyperSpec中发现了许多特定于实现的但没有的,我想知道是否有任何我没有在规范中定义的内容。我发现CLISP和SLIME都识别(quit)
,(exit)
只能被CLISP识别,但我找不到任何引用其中任何一个的文档。
答案 0 :(得分:18)
据我所知,这不属于规范,您必须使用特定于实现的解决方案,或者尝试查看某人是否已经编写了一个简单的退出lib(或者在{ {3}})。
如果您只关心交互式使用,SLIME中的,q
将始终做正确的事情。否则,您可以使用如下读取时间条件:
(defun my-quit ()
#+sbcl (sb-ext:quit)
#+clisp (ext:exit)
#+ccl (ccl:quit)
#+allegro (excl:exit)) ;; and so on ...
如果以下符号位于*features*
,则
答案 1 :(得分:16)
由于大多数Lisps将退出函数导入CL-USER,因此在不知道实现特定包的情况下,CL-USER :: QUIT是一个很好的猜测。
(cl-user::quit)
请注意两个冒号,因为不需要从CL-USER包导出QUIT。
答案 2 :(得分:6)
退出CL环境没有标准方法。要了解如何在您正在使用的实现中执行此操作,请阅读其文档。
在sbcl中,(sb-ext:quit)
可以解决问题。对于clisp,它是(ext:exit)
。该命令的clisp文档位于http://clisp.sourceforge.net/impnotes.html#quit
答案 3 :(得分:1)
您可以使用(uiop:quit)
。这在大多数lisps中都包含在内。
答案 4 :(得分:0)
有一个Capacitor Filesharer提供了一个quit
函数,该函数仅具有通用CL实现的条件。