; mische-sortierte-listen.scm ; Die Funktion mischt zwei aufwaerts sortierte Listen zu einer. (define erste '(2 5 15 22 33 124 1872)) (define zweite '(1 2 3 4 5 6 7 8 9)) ;;; ----- Kopf der Funktion ----- (define (mische-sortierte-listen erste zweite) 'undefiniert) ; Test: (mische-sortierte-listen erste zweite) ;;; ----- Kopf der ersten Liste ist kleiner als der von der zweiten ----- (define (mische-sortierte-listen erste zweite) (cond ((< (car erste) (car zweite)) (cons (car erste) (mische-sortierte-listen (cdr erste) zweite))) (else 'undefiniert)) ) ; Test: (mische-sortierte-listen erste zweite) ;;; ----- der else-Fall ----- (define (mische-sortierte-listen erste zweite) (cond ((< (car erste) (car zweite)) (cons (car erste) (mische-sortierte-listen (cdr erste) zweite))) (else (cons (car zweite) (mische-sortierte-listen erste (cdr zweite))))) ) ; Test: (mische-sortierte-listen erste zweite) ; Aufruf gibt einen Fehler, weil die zweite Liste leer war --> Abbruch definieren!!! ;;; ----- zweite Liste ist leer ----- ; Wo muss man das Testen? ; --> Abbruch (fast) immer zuerst testen! (define (mische-sortierte-listen erste zweite) (cond ((null? zweite) erste) ((< (car erste) (car zweite)) (cons (car erste) (mische-sortierte-listen (cdr erste) zweite))) (else (cons (car zweite) (mische-sortierte-listen erste (cdr zweite))))) ) ; Test: (mische-sortierte-listen erste zweite) ; Das war's noch nicht: (mische-sortierte-listen '(2 4 6 8) zweite) ;;; ----- erste Liste ist leer ----- ; Die erste Liste ist auch irgendwann leer. (define (mische-sortierte-listen erste zweite) (cond ((null? erste) zweite) ((null? zweite) erste) ((< (car erste) (car zweite)) (cons (car erste) (mische-sortierte-listen (cdr erste) zweite))) (else (cons (car zweite) (mische-sortierte-listen erste (cdr zweite))))) ) ; Test: (mische-sortierte-listen erste zweite) (mische-sortierte-listen '(2 4 6 8) zweite)