Каковы магические переменные в REPL CLISP? - PullRequest
4 голосов
/ 02 января 2012

Я заметил, что когда я набираю оператор в REPL, он часто раскрывается в значение, которое имеет отношение к истории ввода / вывода.

В частности, я заметил, что:

  • +, ++ ... развернуть до предыдущих вводов,
  • *, ** ... развернуть до предыдущих выходов,
  • - развернуть до текущего ввода

Очевидно, что есть и другие (/ расширяется до чего-то, но я точно не понял).

Я пытался просматривать документы clisp, но безуспешно.

Мои вопросы:

  • Какие такие магические переменные REPL также существуют? Что они делают?
  • Есть ли способ получить доступ к N-му входу или выходу (например, массивы IPython In и Out)?

Ответы [ 2 ]

7 голосов
/ 02 января 2012

Переменные REPL документированы в словаре среды Hyperspec (поиск "Переменная"). Стандарт не требует наличия большего количества входов / выходов, чем три, и я не знаю ни одной реализации, которая это делает.

3 голосов
/ 02 января 2012

Как упоминалось в другом ответе, эти переменные описаны в стандарте 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 .

...