23 Stimmen

Sind Paar und Liste in Scheme verschieden?

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?

34voto

hammar Punkte 136080

Nein, sie sind nicht gleich.

'(1 . 2) bedeutet (cons 1 2)

während

'(1 2) bedeutet (cons 1 (cons 2 nil))

4voto

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.

3voto

Chang Peng Punkte 1022

(1 . 2) wird manchmal als falsche Liste bezeichnet, weil sie nicht mit NIL endet. (1 2) im Punktformat kann als (1 2 . NIL) geschrieben werden, aber Sie sollten so etwas nicht schreiben.

2voto

Reggie Punkte 373

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.

listenpaare

0voto

Ira Punkte 686

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X