Hallo leute,
ich bin mal wieder am Verzweifeln bei den Schemeaufgaben und habe gemerkt, dass ich diese Rekursion bei Scheme immer noch nciht wirklich verstanden hab :/ Wenn das Programm nicht rekursiv arbeiten würde, dann wären die Aufgabe ja echt ein Klacks, leider ist das ja nicht so :/
Also wollte ich mal fragen ob mir jemand mal richtig erklären könnte wie das dort funktioniert
Das aus den früheren Programmen hab ich ja eigentlich verstanden (denke ich) z.b. dieses facultätsprogramm.
[codefile](define (fac n)
(if (< n 2) 1
(* n (fac (- n 1)))))[/codefile]
aber wie ist das bei diesem Programm, das 2 Listen (die Mengen darstellen sollen) voneinander abzieht.
[codefile](define (minus-list-set set1 set2)
(cond ((null? set1) '())
((null? set2) set1)
(else
(let ((x1 (car set1)) (x2 (car set2)))
(cond ((= x1 x2) (minus-list-set (cdr set1) (cdr set2)))
((< x1 x2) (cons x1 (minus-list-set (cdr set1) set2)))
(else (minus-list-set set1 (cdr set2)))))))) [/codefile]
(minus-list-set '(1 2 3 4 5 6 7 8 9 10) '(2 4 7 9 12)) --->(1 3 5 6 8 10)
Wo speichert das Programm die neue Liste? Irgendwie in sich selber oder so? :/ ich komme damit nicht klar.
und warum funktioniert mein Programm nicht, das eine Liste aus den Elementen bilden soll, die in beiden Listen vorhanden sind:
[codefile]
(define (intersection-list-set set1 set2)
(cond ((null? set1) '())
((null? set2) '())
(else
(let ((x1 (car set1)) (x2 (car set2)))
(cond ((= x1 x2)(cons x1 (intersection-list-set (cdr x1) (cdr x2))))
((< x1 x2)(intersection-list-set (cdr set1) set2))
(else (intersection-list-set set1 (cdr set2))))))))[/codefile]
hab das ja praktisch genau so geschrieben wie das andere Programm :/
hoffentlich kann mir jemand helfen...