;;; 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)))))) ;;; ===== 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))
Der Start der Tiefensuche erfolgt über die "Aufrufhülle" Tiefensuche mit den Parametern Start, Ziel und Graph. Die um diesen Aufruf zusätzlich gelegte if - Bedingung erzwingt die Ausgabe des Startknotens, wenn eine Lösung gefunden wurde.
Graph Bild des Labyrinthes