2013-04-11 7 views
5

Почему оценка (list + 1 2) в Common Lisp (CCL REPL) возвращает ('(+ 1 2) 1 2)?Почему (список + 1 2) принимает значение ('(+ 1 2) 1 2) в Common Lisp


Больше: Хорошо, я вижу, что + на самом деле имеет значение последнего результат REPL, но у меня есть еще вопрос: ли это стандарт CL РЕПЛА вещь, чтобы иметь + равные последний результат, или это Clozure специфический?

+2

Common Lisp Hyperspec - отличная ссылка для языка Common Lisp. У него есть ссылка. Даже для неалфавитных символов: http://www.lispworks.com/documentation/HyperSpec/Front/X_Alph_9.htm –

ответ

7

Вы найдете, что в REPL переменная * содержит последний результат, а + содержит последнюю оцениваемую форму.

Например:

> (+ 1 2) 
    => 3 
> + 
    => (+ 1 2) 
> (+ 2 3) 
    => 5 
> * 
    => 5 

Да, это стандарт, а в HyperSpec.

Если вы хотите, чтобы создать список, содержащий символ +, а не его стоимости, вам нужно будет процитировать он как таковой: '+, или (quote +).

+2

Кроме того, '**', '***', '++' и '+++ 'определены, что позволяет ссылаться на два значения' * 'и' + ', которые предшествуют текущему. – Vatine

Смежные вопросы