Accade in Common Lisp?

5

Da di Steve Yegge "Il Lisp non è un Lisp accettabile" :

 Lisp has a little syntax, and it shows up occasionally as, for instance, '(foo)
 being expanded as (quote foo), usually when you least expect it.

Di cosa sta parlando con '(foo) che viene espanso in (quote foo) in alcune situazioni? (Al contrario, immagino, a (quote (foo)) ).

    
posta yakiv 25.07.2012 - 04:19
fonte

4 risposte

6

Non lo so. Non riesco a pensare a nessuna situazione in cui '(foo) verrebbe trasformato in (quote foo) poiché è in realtà uguale a (quote (foo)) (il simbolo ' è in genere una macro lettore che legge il successivo s-exp e lo restituisce circondato da un chiama al modulo speciale quote ).

    
risposta data 25.07.2012 - 12:03
fonte
2

In PicoLisp , '(foo) equivale a (quote foo) e 'foo equivale a (quote . foo) .

Non ho capito neanche quel paragrafo. È ipotizzabile che Yegge si riferisse a PicoLisp (nel contesto del porting tra dialetti Lisp), oppure che si sarebbe potuto riferire ad un bug o ad un caso d'angolo in un'implementazione CL o Scheme (anche se nessuno di quelli a mia conoscenza).

    
risposta data 01.11.2012 - 17:38
fonte
1

'(foo) non è "espanso" in (citazione foo). Le due forme sono precisamente uguali; il lettore Lisp LEGGE '(pippo) come (citazione foo).

Pensare che siano in qualche modo diversi è completamente fraintendere come lisp legge internamente i moduli.

    
risposta data 29.10.2012 - 11:38
fonte
0

Questo è esattamente al contrario. La situazione sorprendente è che hai alcuni dati come:

(the (quick brown (quote jumped) over) the lazy symbol)

Questi dati non sono codice; sono solo alcuni simboli Ma quando lo stampi, il sistema Lisp trasforma (quote jumped) in 'jumped che, ad esso, significa esattamente la stessa cosa. Per te, potrebbe essere fastidioso perché quella notazione è inapplicabile nei tuoi dati.

La correzione ANSI Common Lisp per questo è usare i pacchetti. Il motivo (quote jumped) trasformato in 'jumped è che siamo in un pacchetto in cui il simbolo quote che è visibile è quello importato / utilizzato dal pacchetto common-lisp : cioè il simbolo common-lisp:quote . Potremmo usare ourpackage per i dati, in cui ourpackage:quote non ha nulla a che fare con common-lisp:quote ; la stampante Lisp la lascerà in pace.

    
risposta data 21.10.2016 - 06:44
fonte

Leggi altre domande sui tag