Каковы магические переменные в 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.

Другие вопросы по тегам