2016-04-04 4 views
1

In Scheme, ich laufe (quote (+ 2 3)) returns (+ 2 3). Nach dem, was ich verstanden habe, hat das Zitat nur Scheme angewiesen, meinen Ausdruck nicht für einen bestimmten Zweck zu bewerten. Ich versuche, die Liste (+ 2 3) ohne die Verwendung von Zitat zu machen. Also habe ich versucht:
typisiert: (cons '+' (cons 2 (cons 3 '())))
Scheme Rückkehr: (+ cons 2 (cons 3 (quote())))
- Ich verstehe nicht, warum ich diesen Rückgabewert bekam. Ich hatte gehofft, für (+ 2 3)
typisierten: (cons '+' (2,3))
Scheme Rückkehr: (+ 2 3)
- Ich verstehe nicht, wie dies funktioniert. Also, ist (cons '+' (2,3)) das gleiche wie (quote (+ 2 3))?Listendarstellung der zitierten Ausdrücke in Schema

+1

Sie haben zu viele Anführungszeichen. Du willst '(cons '...)', nicht '(cons' + '...)'. –

+0

@AlexisKing Oh ich dachte, ich brauche '+' zu sagen, dass + ist ein Zeichen dann '(), um die NULL-Liste zu spezifizieren –

+1

@AnonymousGal Das '+' ist ein Symbol. Ein Zeichen würde als '# \ +' geschrieben werden. Wenn Sie zwei einfache Anführungszeichen verwenden, gibt das erste das '+' -Zeichen und das zweite die folgende Liste an. – jkiiski

Antwort

0

'expression ist das gleiche ein (quote expression) und es wird expression unevaluated. Wenn Sie (cons '+ '(cons 2 (cons 3 '()))) schreiben, zitieren Sie sowohl + als auch das zweite Argument, (cons 2 (cons 3 '())). Die ' hat keine Endmarkierung.

Wenn Paare ein Lisp-Anzeigesystem zur Anzeige Paare mit einem Paar Schwanz als Liste wird standardmäßig, wenn Sie, warum gewundert es nicht in (+ . (cons 2 (cons 3 (quote()))))

Eine Implementierung können wählen, drehte sich wie '(quote()) und ''() angezeigt werden soll. Meine Show '() während Ihre Show (quote()). Sie repräsentieren genau das gleiche, also ist es in anderen Dingen nicht wirklich anders als die Visualisierung.

`(1 , 2) ist das gleiche wie (list '1 2) seit Sie sind unquoting2. Zum Glück für Sie ist es eine Nummer und es wird immer auf sich selbst ausgewertet. Es könnte sein, dass das Komma eine Art Trennung zwischen Elementen war, aber das ist es nicht. Es dient nur dazu, das Schreiben einer großen Datenstruktur zu vereinfachen, in der nur wenige Elemente variabel sind.

(define (test e) 
    `(a list with ,e representing some wanted structure)) 

(test 'test) ; ==> (a list with test representing some wanted structure)