zurück

Vollständige Tiefensuche

;;;                            <Ariadne volle Tiefe.scm>
(define
  (volle-Tiefensuche Start Ziel Suchraum)
  (let
      t-s
    ((Alternativen (Nachfolger Start))
     (besucht (list Start)))
    (cond

      ((null? Alternativen) (void))

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

      ((eq? (car Alternativen) Ziel)
       (Ausgabe (reverse (cons (car Alternativen) besucht)))
       (void))

      (else

       (t-s
        (Nachfolger (car Alternativen))
        (cons (car Alternativen) besucht))

Da im else - Teil auf den Aufruf in die Tiefe schlicht sequenziell der Aufruf der Alternativen erfolgt, wird er in jedem Fall ausgeführt. Daher bricht das Programm nicht nach dem ersten Erfolg ab, sondern arbeitet solange weiter, bis es alle möglichen Wege versucht hat.

       (t-s
        (cdr Alternativen)
        besucht)))))