zurück
;;;                           einfache schematische-Tiefensuche.scm

(define
  (Tiefensuche Start Ziel Graph)

  (let
    t-s
    ((Alternativen (Nachfolger Start  Graph)))
    (cond
      ((null? Alternativen) #f)

      ((eq? (car Alternativen) Ziel)
       (Ausgabe (car Alternativen))
       (car Alternativen))

      ((t-s
        (Nachfolger (car Alternativen) Graph))
       (Ausgabe (car Alternativen))
       (car Alternativen))

      (else  
       (t-s
        (cdr Alternativen))))))

In dieser Zeile wird nichts anderes getan, als auf der derzeitigen Stufe t-s mit den restlichen Alternativen aufzurufen. Dieser Aufruf erfolgt nicht normal rekursiv, sondern endrekursiv und erzeugt daher keine neue beim backtracking zu bearbeitende Stufe, stellt also keinen Schritt in die Tiefe dar.

zurück
;;; ===== Nachfolger ================================================
(define
   (Nachfolger Element Graph)
   (cadr assoc Element Graph)))
;;; ===== Ausgabe ===================================================
(define
  (Ausgabe Knoten)
  (display Knoten)
  (display " <-- "))

;;; ===== Aufruf ====================================================
(define Start 1)
(define Ziel 8)
(if (Tiefensuche Start Ziel Graph) (display Start))
Graph Bild des Labyrinthes