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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow