This post has been edited 4 times, last edit by "neweb" (Nov 23rd 2006, 12:32pm)
Quoted
Original von neweb
Eine Liste bekommt man in Scheme immer genau dann, wenn cons als 2. parameter eine liste oder einen weiteren cons hat.
This post has been edited 1 times, last edit by "ctk" (Nov 23rd 2006, 10:50pm)
Quoted
Original von iriania
Eine Scheme-Liste hat folgende Eigenschaften:
1. Sie ist leer ()
oder
2. Sie enthält einen oder mehrere Elemente, wobei diese Elemente nur durch Leerzeichen voneinander getrennt sind, also nicht durch Punkte, Kommata, etc.
Ich erinnere mich daran, dass ich die Frage, ob z.B.
(cons (cons 1 2) (cons 3 (cons 4 (cons (cons 5 6) (cons 7 (cons (cons 8 9) ’()))))))
eine Liste ist oder nicht immer dadurch gelöst habe, indem ich mir die Endform davon in der Ausgabe angesehen habe.
so soll eine Liste in der Ausgabe aussehen:
(1 2 3 (5 4 6) 3 2)
oder so:
(1 2 3 4 5 6 7 8 )
oder so:
()
aber niemals so:
(1 . 2 3 4 5)
oder
(1 2 3 4 . 5)
ich hoffe, es ist klar, was ich sagen wollte - Scheme ist für mich schon länger her und ich habe auch kein drScheme mehr auf meinem PC.
Quoted
Original von Armin1906
ist diese Definition nun richtig? Weil nach der Def. wären folgende Strukturen keine Listen ? Oder sehe ich da was falsch ???
(cons (cons 1 2) (cons 3 (cons 4 (cons (cons 5 6) (cons 7 (cons (cons 8 9) ’()))))))
(cons 1 (cons 2 (cons 3 (cons (cons 4 5) (cons 6 (cons 7 (cons (cons 8 ’()) 9)))))))
(cons 1 (cons 2 (cons 3 (cons 4 (cons 5 (cons 6 (cons (cons 7 8) (cons 9 ’()))))))))
(cons ’() (cons (cons (cons 1 (cons 2 (cons (cons 3 4) 5))) (cons (cons 6 7) 8)) 9))
(cons (cons (cons (cons (cons (cons (cons 1 (cons 2 (cons 3 4))) 5) 6) 7) 8) 9) ’())
Wobei natürlich 8) gleichzusetzen ist mit 8 ) ohne Leerzeichen.
Source code |
|
1 2 3 4 5 |
(list? (cons (cons 1 2) (cons 3 (cons 4 (cons (cons 5 6) (cons 7 (cons (cons 8 9) ’()))))))) (list? (cons (cons (cons (cons (cons (cons (cons 1 (cons 2 (cons 3 4))) 5) 6) 7) 8) 9) '())) (list? (cons 1 (cons 2 (cons 3 (cons 4 (cons 5 (cons 6 (cons (cons 7 8) (cons 9 '()))))))))) |
This post has been edited 1 times, last edit by "neweb" (Nov 23rd 2006, 5:27pm)
Source code |
|
1 2 3 4 5 6 7 |
(cons (cons 1 2) (cons 3 (cons 4 (cons (cons 5 6) (cons 7 (cons (cons 8 9) '())))))) |
Quoted
Original von Schokoholic
Was ich ganz hilfreich finde um zu erkennen ob etwas eine Liste ist ist, es einfach mit DrScheme eingerückt zu schreiben:
Source code
1 2 3 4 5 6 7 (cons (cons 1 2) (cons 3 (cons 4 (cons (cons 5 6) (cons 7 (cons (cons 8 9) '()))))))
Da sieht man ganz gut, was jeweils das zweite Element, also das (cdr) von jedem (cons) ist. Nach der Definition musst das (cdr) ja entweder die leere Liste oder eine Liste sein, wenn es die Struktur eine Liste sein soll.
Also guckt man sich immer das cdr an und wenn man irgendwann auf die leere Liste trifft, dann ist auch der ganze Ausdruck eine Liste.
Dass dann z.B. in der vierten Zeile ein (cons) steht, das keine Liste ist, hat keine Auswirkungen, da es ja nicht das cdr vom übergeordneten cons ist.
This post has been edited 2 times, last edit by "Armin1906" (Nov 23rd 2006, 6:58pm)
Quoted
Original von ctk
Quoted
Original von neweb
Eine Liste bekommt man in Scheme immer genau dann, wenn cons als 2. parameter eine liste oder einen weiteren cons hat.
Etwas treffender ist vl folgende rekusive Definition:
Eine Liste ist entweder die leere Liste oder ein Paar aus einer belibigen Variable und einer Liste
This post has been edited 1 times, last edit by "neweb" (Nov 23rd 2006, 9:06pm)
Quoted
Original von Armin1906
1. Okay, also ist das zweite cons in Zeile 4 für sich keine Liste (weil es im cdr kein '() oder eine Liste hat). Und das cons in Zeilen 3 ff. ist eine Liste, da es im cdr eine Liste hat. Richtig oder falsch erklärt ?
Quoted
Original von neweb
Gegenbeispiel:
(cons (cons 7 '()) 2)
Ordnung muss sein
Source code |
|
1 2 3 4 |
(define (list? x) (cond ((null? x) #t) ((pair? x) (list? (cdr x))) (else #f))) |
This post has been edited 2 times, last edit by "ctk" (Nov 24th 2006, 4:25pm)