Cytowanie w Common Lisp
Ostatnio zacząłem uczyć się sekretu. Przeglądałem przykłady w książceLand of Lisp i czułem, że wszystko rozumiem raczej dobrze, aż doszedłem do następującego przykładu w rozdziale 7:
(defun quote-it (x)
(list 'quote x))
Teraz to wiemlist
utworzy listę z jej argumentami, jak w(list 1 2 3 4)
oceni na listę(1 2 3 4)
.
I ja też to wiemquote
pozwala mi zacytować argument, zupełnie jak mogę to zrobić'
. A więc'east
jest taki sam jak(quote east)
Co ciekawe, powyższa funkcja nie zwraca listy, ale po prostu cytuje to, co do niej przekazuję. I tak, jeśli to nazywam
(quote-it east)
to po prostu powróci'east
i nie('east)
Gdybym to zrobił, napisałbym funkcję jako
(defun quote-it (x)
(quote x))
Więc nie mam pojęcia, dlaczego piszemy polecenie jako'quote
w(list 'quote x)
w przykładzie z książki.
Wiem, że mogę przełączać się między kodem a danymi, używając cytatów, takich jak'(+ 1 2)
, ale w tym przypadku wygląda na to, że zamierzam zastosować tutaj funkcję cytowania. Więc dlaczego(list 'quote x)
?
Czy ktoś, kto ma więcej doświadczenia, może to wyjaśnić?