Переменные *, + и / связаны с недавним вводом в SLIME или Clozure CL? - PullRequest
2 голосов
/ 09 сентября 2010

Я бездельничал в SLIME (подключил Clozure REPL), когда обнаружил это:

Похоже, что переменные +, * и / все связаны с некоторым изменением недавнего ввода,сам ввод, * является результатом оценки этого ввода, и / содержится ли результат в списке.

Это правильно?Кто несет ответственность за это, SLIME или Clozure?Я ничего не смог найти в инструкции SLIME.

Спасибо!

; SLIME 2010-05-13
CL-USER> +
NIL
CL-USER> *
NIL
CL-USER> /
(NIL)
CL-USER> -
-
CL-USER> +
-
CL-USER> (list 1 2)
(1 2)
CL-USER> +
(LIST 1 2)
CL-USER> /
((LIST 1 2))
CL-USER> (+ 1 2)
3
CL-USER> /
(3)
CL-USER> *
(3)
CL-USER> (* 1 2)
2
CL-USER> *
2
CL-USER> 

Ответы [ 2 ]

4 голосов
/ 09 сентября 2010

Это все и даже больше, определяемое стандартом Common Lisp.Поиск в словаре среды для 'Переменная'.

1 голос
/ 15 февраля 2012

+
++
+++

Пока форма оценивается циклом верхнего уровня, переменная + привязывается к предыдущей форме, прочитанной циклом. Переменная ++ содержит предыдущее значение + (то есть форма, вычисленная два взаимодействия назад), а +++ содержит предыдущее значение ++.

-

Пока форма оценивается циклом верхнего уровня, переменная - связана с самой формой; то есть это значение, которое должно быть присвоено + после завершения этого взаимодействия.

*
**
***

Пока форма оценивается циклом верхнего уровня, переменная * привязывается к результату, напечатанному в конце последнего времени цикла; то есть это значение, полученное путем оценки формы в +. Если было получено несколько значений, * содержит только первое значение; * содержит ноль, если были получены нулевые значения. Переменная ** содержит предыдущее значение * (то есть результат, напечатанный два взаимодействия назад), а * содержит предыдущее значение **.

/
//
///

Пока форма оценивается циклом верхнего уровня, переменная / привязывается к списку результатов, напечатанных в конце последнего цикла цикла; то есть это список всех значений, полученных путем оценки формы в +. Значение * всегда должно совпадать с автомобилем значения /. Переменная // содержит предыдущее значение / (то есть результаты напечатаны два взаимодействия назад), а /// содержит предыдущее значение //. Поэтому значение ** всегда должно быть таким же, как у автомобиля //, и аналогично для * и ///.

С Common Lisp the Language, 2-е издание 20.2

...