2016-10-24 9 views
0

Ich habe gerade angefangen zu lernen, Schema, und ich finde den Cons-Cdr Teil ein wenig schwer zu verstehen. Ich mache eine Funktion, die eine Liste annimmt und dann alle Atome in dieser Liste anzeigt, einschließlich in den Unterlisten, als ob es eine große Liste wäre. Es würde wie folgt aussehen: (abflachen ‚(1 (2 3) 4 5 (6 7)))Scheme Programm Verarbeitung von Unterlisten in einer Liste

(1 2 3 4 5 6 7)

Hier ist mein code:

(define (flatten list1) 
    (if (not (empty? list1)) 
    (if (atom? (car list1)) 
    (cons (car list1)(flatten (cdr list1))) 
    (begin 
    (flatten (car list1)) 
    (flatten (cdr list1)))) 
    '())) 

Wenn Sie dies tun, werden jedoch die Unterlisten entfernt. Also (flattern '((1 2) 3 4) würde (3 4) statt (1 2 3 4) geben.

Irgendwelche Hilfe? Das Problem ist wahrscheinlich in der "(beginnen" Abschnitt, aber ich kann' t Figur it out ..

Dank

+0

Ist das eine Hausaufgabe, oder versuchen Sie nur, es selbst zu verstehen? Mein Tipp (wenn es sich um Hausaufgaben handelt) ist, dass die gesamte Liste, die Sie zur Verfügung gestellt haben, verarbeitet wird, aber Sie kombinieren nie die Ausgabe der beiden Funktionen in Ihrem "Begin" -Abschnitt. Dies bedeutet, dass nur '(flatten (cdr list1))' tatsächlich zurückgegeben wird. –

+0

Müssen Sie auch beliebig weit in Listen gehen können oder reicht eine Tiefe von 1 aus? Womit meine ich sollte? ((1 2) 3 ((4 5) 6)) zu "(1 2 3 (4 5) 6)" oder "(1 2 3 4 5 6)"? –

Antwort

0

versuchen so etwas wie dies in Ihrem Ihre begin Block

(append (flatten (car aList)) (flatten (cdr aList))) 

auch die Post ist es fast die gleiche Frage, wenn nicht das gleiche: flatten list

Verwandte Themen