(define
(Rucksack-packen Gewicht Teilgewichte Ergebnis)
(cond
((zero? Gewicht) ; Lösung gefunden !
Ergebnis)
((null? Teilgewichte) ; nicht voll erfüllt
(cons "nicht exakt" Ergebnis))
((< Gewicht (car Teilgewichte)) ; erster geht nicht
(Rucksack-packen Gewicht (cdr Teilgewichte) Ergebnis))
(else ; einpacken und weiter
(Rucksack-packen
(- Gewicht (car Teilgewichte))
(cdr Teilgewichte)
(cons (car Teilgewichte) Ergebnis)))))
Wird die Funktion nun z.B. mit
(Rucksack-packen 101 '(30 30 30 20 20 20 15 15 5 3 2 1 1)) ())
aufgerufen gibt sie als Wert die Liste
(1 2 3 5 30 30 30)
aus.
Will man den Ablauf verfolgen, setzt man unmittelbar vor dem cond den folgenden Aufruf ein:
(bkpt Gewicht Teilgewichte Ergebnis)