Ich frage mich, ob '(1 . 2)
und '(1 2)
in Scheme dieselben Daten bedeuten (gleich sind) oder nicht? Ich denke, sie sind dasselbe, ist das korrekt?
Antworten
Zu viele Anzeigen?Dr. Rackect erklärt es viel klarer:
"Ein Paar verbindet zwei beliebige Werte.....Die cons-Prozedur konstruiert Paare"
(cons 1 2)
'(1 . 2)
(pair? (cons 1 2))
#t
andererseits
"Eine Liste ist eine Kombination von Paaren, die eine verkettete Liste erstellt. Genauer gesagt, eine Liste ist entweder die leere Liste null, oder sie ist ein Paar, dessen erstes Element ein Listen-Element ist und dessen zweites Element eine Liste ist."
(cons 0 (cons 1 (cons 2 null)))
'(0 1 2)
http://docs.racket-lang.org/guide/pairs.html
bitte LISP gibt es seit den 50er Jahren für genaue Antworten sehen Sie sich deren Dokumentation und Beispiele an, sie existieren seit über 60 Jahren, manche Menschen wurden nicht einmal dort geboren.
Ja!
Paare: (cons y z)
erstellt ein Paar zwischen den Werten y und z. Ebenso erstellt der (kompliziertere) Ausdruck (cons x (cons y z))
ein Paar zwischen x und dem Paar (y . z)
. Diese Paare können auch als '(y . z)
und '(x . (y . z))
dargestellt werden.
Listen: Eine Liste ist einfach eine spezielle Art von Paar. Es handelt sich um den Fall, in dem ein Wert an eine bereits bestehende Liste angehängt wird. Da die allererste Liste irgendwo beginnen muss, haben wir immer die leere Liste '()
(manchmal auch als 'leere Liste' bezeichnet), die bereit ist, gepaart zu werden. Also paart (cons y '())
y mit der leeren Liste, um die Ein-Punkt-Liste '(y)
zu erzeugen. Ebenso paaren (cons x '(y))
und (cons x (cons y '()))
x mit der Liste '(y)
, um die Liste '(x y)
zu erzeugen.
Die Liste muss mit einer leeren Liste enden (auch als Null bezeichnet). Im folgenden Beispielscode auf repl wird der Unterschied verdeutlicht.
> (cons 1 (cons 2 '())) ; Ich bin ein Paar sowie eine Liste
'(1 2)
(pair? (cons 1 (cons 2 '())))
#t
> (list? (cons 1 (cons 2 '())))
#t
> (cons 1 (cons 2 3)) ; Ich bin ein Paar aber keine Liste
'(1 2 . 3)
> (pair? (cons 1 (cons 2 3)))
#t
> (list? (cons 1 (cons 2 3)))
#f