common-lisp
Zacytować
Szukaj…
Składnia
- (cytat obiektu) -> obiekt
Uwagi
Istnieją obiekty (na przykład symbole słów kluczowych), które nie muszą być cytowane, ponieważ oceniają je same.
Prosty przykład wyceny
Cytat jest specjalnym operatorem, który uniemożliwia ocenę jego argumentu. Zwraca swój argument, nieoceniony.
CL-USER> (quote a)
A
CL-USER> (let ((a 3))
(quote a))
A
”to pseudonim specjalnego operatora QUOTE
Notacja 'thing
jest równa (quote thing)
.
Czytelnik wykona rozszerzenie:
> (read-from-string "'a")
(QUOTE A)
Cytowanie służy do zapobiegania dalszej ocenie. Cytowany obiekt ocenia się sam.
> 'a
A
> (eval '+ 1 2)
3
Jeśli cytowane obiekty są niszczone, konsekwencje są niezdefiniowane!
Unikaj destrukcyjnych operacji na cytowanych obiektach. Cytowane obiekty są dosłowne. Prawdopodobnie są one w jakiś sposób osadzone w kodzie. Jak to działa, a skutki modyfikacji nie są określone we wspólnym standardzie Lisp, ale może to mieć niepożądane konsekwencje, takie jak modyfikowanie udostępnionych danych, próba modyfikacji danych chronionych przed zapisem lub tworzenie niezamierzonych efektów ubocznych.
(delete 5 '(1 2 3 4 5))
Cytat i samoocena przedmiotów
Zauważ, że wiele typów danych nie musi być cytowanych, ponieważ oceniają one same. QUOTE
jest szczególnie przydatny w przypadku symboli i list, aby zapobiec ocenie w postaci formularzy Lisp.
Przykład innych typów danych, których nie trzeba cytować, aby zapobiec ocenie: ciągi, liczby, znaki, obiekty CLOS, ...
Oto przykład dla ciągów. Wyniki oceny są ciągami znaków, bez względu na to, czy są cytowane w źródle, czy nie.
> (let ((some-string-1 "this is a string")
(some-string-2 '"this is a string with a quote in the source")
(some-string-3 (quote "this is another string with a quote in the source")))
(list some-string-1 some-string-2 some-string-3))
("this is a string"
"this is a string with a quote in the source"
"this is another string with a quote in the source")
Cytowanie obiektów jest zatem opcjonalne.