Каковы магические переменные в REPL CLISP?
Я заметил, что когда я набираю оператор в REPL, он часто раскрывается в значение, которое имеет отношение к истории ввода / вывода.
В частности, я заметил, что:
+
,++
... расширить до предыдущих входов,*
,**
... расширить до предыдущих результатов,-
развернуть до текущего ввода
Там видимо больше (/
расширяется до чего-то, но я точно не разобрался).
Я пытался просматривать документы clisp, но безуспешно.
Мои вопросы:
- Какие такие магические переменные REPL также есть? Что они делают?
- Есть ли способ получить доступ к Nth ввода или вывода (например, IPython
In
а такжеOut
массивы)?
2 ответа
Переменные REPL документированы в словаре среды Hyperspec (поиск "Переменная"). Стандарт не требует наличия большего количества входов / выходов, чем три, и я не знаю ни одной реализации, которая это делает.
Как упоминалось в другом ответе, эти переменные задокументированы в стандарте ANSI Common Lisp.
В дополнение к этому реализация Common Lisp может иметь множество других функций. Полнофункциональный верхний уровень с пользовательским интерфейсом часто называют "слушателем Lisp".
Реализация CLISP предоставляет дополнительные команды в отладчике. Смотрите главу 25 документации.
LispWorks имеет некоторые расширения в REPL, а также предоставляет Listener. Вот некоторые примеры:
Взаимодействие № 2, в пакете CL-USER:
CL-USER 2 > (* 3 4)
12
То же самое, но мы можем опустить внешние скобки:
CL-USER 3 > * 3 4
12
Давайте повторим взаимодействие 2:
CL-USER 4 > :redo 2
(* 3 4)
12
Давайте повторим взаимодействие 2, но с делением вместо умножения:
CL-USER 5 > :use / * 2
(/ 3 4)
3/4
Другими реализациями с такими расширениями, как команды, истории вывода или аналогичными функциями, являются, например, Allegro CL и Clozure CL.
SLIME, который предоставляет среду разработки Common Lisp на основе GNU Emacs, также предоставляет расширенный REPL.