2013-04-11 19 views
5

Dlaczego ocena (list + 1 2) w Common Lisp (CCL REPL) zwraca ('(+ 1 2) 1 2)?Dlaczego (lista + 1 2) odpowiada ('(+ 1 2) 1 2) w Common Lisp


Więcej: OK, widzę, że + faktycznie ocenia do ostatniego wyniku REPL, ale mam jeszcze pytanie: Czy to standard CL REPL rzeczą, aby mieć + równą ostatniego wyniku, czy to jest specyficzne dla Clozure?

+2

Common Lisp Hyperspec to doskonałe odniesienie do języka Common Lisp. Ma odniesienie. Nawet w przypadku symboli niealfabetycznych: http://www.lispworks.com/documentation/HyperSpec/Front/X_Alph_9.htm –

Odpowiedz

7

Przekonasz się, że w REPL zmienna * zawiera ostatni wynik, a + zawiera ostatni wyceniony formularz.

Na przykład:

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

Tak, to standard, aw HyperSpec.

Jeśli chcesz utworzyć listę zawierającą symbol +, raczej niż jego wartość, trzeba zacytować to jako takie: '+ lub (quote +).

+2

Ponadto, '**', '***', '++' i '+++ 'są zdefiniowane, pozwalając ci odwoływać się do dwóch wartości' * 'i' + ', które poprzedza bieżącą. – Vatine