2016-08-21 10 views
0
> (procedure? +) 
#t 
> (procedure? (car '(+ 2 3))) 
#f 
> (list? '(+ 2 3)) 
#t 
> (symbol? (car '(+ 2 3))) 
#t 
> (define someList (list + 2 3)) 

> someList 

> '(#< procedure:+ > 2 3) 

> (procedure? (car someList)) 
#t 
> 

Ist es möglich, als eine Prozedur bei der Verwendung von Anführungszeichen erkannt zu werden?Über Angebote in Scheme

+1

Nein. "+" Ist ein Symbol, weil die Quotierung die Auswertung des Symbols verhindert. – uselpa

+0

Mögliches Duplikat von [Was ist der Unterschied zwischen Angebot und Liste?] (Http://stackoverflow.com/questions/34984552/what-is-the-difference-between-quote-and-list) –

Antwort

1

Listen, Vektoren, Symbole, Strings, Boolesche Zeichen und Zahlen haben den Vorteil, dass sie wörtliche Darstellungen haben, während Prozeduren dies nicht tun. Man könnte argumentieren, dass es möglich wäre, eine literale Repräsentation für globale und vielleicht sogar globale Modulbindungen zu haben, da sie zur Makroexpansionszeit bestimmt werden könnten, aber da wir nicht das beste tun wollen, ist die Verwendung von Quasiquot zur Auswertung einige Teile:

`(,+ 1 2 3) ; ==> (#<procedure:+> 1 2 3) 

Beachten Sie, dass + nach Auswertung nichts in dieser Liste gibt es mit dem Symbol + zugeordnet ist. Auch wissen, dass das Symbol + Daten ist und nicht mit der Variablen + verwechselt werden.