Есть ли команда для остановки интерпретатора в Common Lisp? - PullRequest
18 голосов
/ 13 декабря 2010

Я ищу выражение, которое заставит интерпретатор завершить работу при его оценке.

Я нашел много специфичных для реализации, но ни одного в HyperSpec, и мне было интересно, есть либыли те, которые я не видел, определены в спецификации.Я обнаружил, что (quit) распознается как CLISP, так и SLIME, а (exit) распознается только CLISP, но я не могу найти документацию, которая ссылается ни на одну из них.

Ответы [ 4 ]

18 голосов
/ 13 декабря 2010

Насколько я знаю, это не охватывается спецификацией, и вам придется использовать решения, специфичные для реализации, или, возможно, попытаться посмотреть, не написал ли кто-нибудь тривиально-завершающую библиотеку (или запустить ее на 1001 * CLiki ).

Если вы заботитесь только об интерактивном использовании, ,q в SLIME всегда будет действовать правильно. В противном случае вы можете использовать условные выражения для чтения, например:

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

#+ проверяет, находится ли следующий символ в *features*. Если нет, следующая форма будет считаться пробелом. (Существует также #- для противоположного).

16 голосов
/ 13 декабря 2010

Поскольку большинство Lisps импортируют функцию выхода в CL-USER, CL-USER :: QUIT является хорошим предположением, не зная пакета, в котором реализована реализация.

(cl-user::quit)

Обратите внимание на два двоеточия, так как QUIT не нужно экспортировать из пакета CL-USER.

6 голосов
/ 13 декабря 2010

Не существует стандартного способа выхода из среды CL.Чтобы узнать, как это сделать в используемой вами реализации, прочитайте ее документацию.

В sbcl (sb-ext:quit) поможет.Для clisp это (ext:exit).Документация для команды clisp: http://clisp.sourceforge.net/impnotes.html#quit

0 голосов
/ 11 июня 2019

Существует библиотека ASDF, называемая shut-it-down , которая предоставляет функцию quit, которая работает, просто имея случаи для распространенных реализаций CL.

...