zurück Beispiel 1

Tiefensuche mit selbst verwaltetem stack

(define
  (Tiefensuche Start Ziel)
  (let
      t-s
    ((Alternativen (Nachfolger Start))
     (besucht (list Start))
     (stack ()))

    (writeln Alternativen besucht stack) ; zum Protokollieren

    (cond

Die Suche war erfolglos, wenn sowohl die Alternativen als auch der stack leer sind.

      ((and
        (null? Alternativen)
        (null? stack))
       #f)

Gibt es keine Alternativen erfolgt der Rücksprung und der stack muss abgebaut werden.

      ((null? Alternativen)
       (t-s
        (car stack)          ; stellt Alternativen (bis auf 1.) wieder her
        (cdr besucht)        ; stellt besucht - Liste wieder her
        (cdr stack)))        ; stellt stack wieder her

Hier waren wir schon. Alternativen abbauen !

      ((member (car Alternativen) besucht)
       (t-s
        (cdr Alternativen)
        besucht
        stack))

Das Ziel ist gefunden !

      ((eq? (car Alternativen) Ziel)
       (writeln (reverse (cons (car Alternativen) besucht)))
       #t)

Ab in die Tiefe !

      (else
       (t-s
        (Nachfolger (car Alternativen))
        (cons (car Alternativen) besucht)
        (cons (cdr Alternativen) stack))))))

(define
  (Nachfolger Element)
  (cadr (assoc Element Graph)))