Ok, Oixio hatte ja schon gesagt, dass ein cons zwei Elemente zu einem Tupel macht:
|
Source code
|
1
|
(cons 1 2) => (1 . 2)
|
Nun möchtest Du ja wieder auf die Elemente im Tupel zugreifen können, dafür sind car und cdr da. car ermöglicht den Zugriff auf das erste Element und cdr den Zugriff auf den Rest.
|
Source code
|
1
2
|
(car (cons 1 2)) => 1
(cdr (cons 1 2)) => 2
|
Das gilt genauso für kompliziertere "Tupel"
|
Source code
|
1
2
|
(car (cons 1 (cons 2 3))) => 1
(cdr (cons 1 (cons 2 3))) => (2 . 3)
|
Du kannst beliebig komplizierte Strukturen mit cons erzeugen, so auch den Aufruf von struktur in Deinem Beispiel.
|
Source code
|
1
|
((1 . 2) 5 (8 . 3) . 7)
|
Ist die Scheme Darstellung Deiner struktur. Dir ist ja sicher aufgefallen, dass in der äusseren Klammer nur ein Punkt steht, dieser steht ganz am Ende. Das ist normal so, aber trotzdem sind die Zahlen darin einzelne Elemente. Das bedeutet
|
Source code
|
1
2
|
(car struktur) => (1 . 2)
(cdr struktur) => (5 (8 . 3) . 7)
|
Und so weiter und sofort, danach musst Du nur noch fröhlich car und cdr auf die Struktur loslassen um ein beliebiges Element zu erreichen.