; spalte-in-zwei-listen.scm ; spaltet eine Liste in zwei annaehernd gleich große Listen; ; dies ist nur endrekursiv sinnvoll. (define liste '(54 564 7647 8659 449 864 36 56 6 97 6)) ; ----- Kopf der Funktion (define (spalte liste erste zweite) 'undefiniert) ; Test: (spalte liste '() '()) ; ----- Abbruch: liste ist leer ; die Listen werden als Paar zurückgegeben. (define (spalte liste erste zweite) (cond ((null? liste) (cons erste zweite)) (else 'undefiniert)) ) ; Test: (spalte '() '(1 2 3 4) '(5 6 7 8)) ; ----- Abbruch: liste enthält nur ein Element ; Kopf von liste in erste und die Listen werden als Paar zurückgegeben. (define (spalte liste erste zweite) (cond ((null? liste) (cons erste zweite)) ((null? (cdr liste)) (cons (cons (car liste) erste) zweite)) (else 'undefiniert)) ) ; Test: (spalte '(9) '(1 2 3 4) '(5 6 7 8)) ; ----- else - Fall: weitermachen (define (spalte liste erste zweite) (cond ((null? liste) (cons erste zweite)) ((null? (cdr liste)) (cons (cons (car liste) erste) zweite)) (else (spalte (cddr liste) (cons (car liste) erste) (cons (cadr liste) zweite)))) ) ; Test: (spalte liste '() '())