Aufgaben 2-611-11-02 

Rekursive Prozeduren

Aufgabe 2: Lösung:
(define fibonacci (lambda (n) (cond [(< n 2) '1] [else (+ (fibonacci (- n 2)) (fibonacci (- n 1)))]))) (define fibonacci_list (lambda (n) (if (= n -1) '() (append (fibonacci_list (- n 1)) (list (fibonacci n)))))) Kommentar: Haben wir ja schon im Unterricht behandelt. Aufgabe 3: Lösung: (define ascending (lambda (l) (if (< (length l) 2) #t (if (> (car l) (car (cdr l))) #f (ascending (cdr l)))))) Kommentar: Das ist die Lösung ohne Sort - diese wird vom SchemeGrader auch mit voller Punktzahl bewertet. Idee: Immer das erste mit dem zweiten Listenelement vergleiche, wenn das erstere größer dem zweiterem dann Liste nicht sortiert. Aufgabe 4: Lösung: (define my-length (lambda (n) (length n))) (define deep-length (lambda (n) (cond ((null? n) 0) ((list? (car n)) (+ (deep-length (car n)) (deep-length (cdr n)))) (else (+ (deep-length (cdr n)) 1))))) Kommentar: Die my-length function ist dabei etwas einfach *grins* aber der SchemeGrader fands ok ;o) Aufgabe 6: Lösung: (define neg-out-filter (lambda (n) (cond ((null? n) '()) ((< (car n) 0) (neg-out-filter (cdr n))) (else (cons (car n) (neg-out-filter (cdr n))))))) (define neg-out-filter2 (lambda (n) (cond ((null? n) '()) ((< (car n) 0) (neg-out-filter2 (cdr n))) ((> (car n) 100) (neg-out-filter2 (cdr n))) (else (cons (car n) (neg-out-filter2 (cdr n))))))) Kommentar: Hier gibts eigentlich nicht viel dazu zu sagen. Es wird halt immer eine Bedingung geprüft - wenn diese zutrifft dann wird das Element nicht mit in die neue Liste übernommen ansonsten schon.