;;; einfache schematische-Tiefensuche.scm (define (Tiefensuche Start Ziel Graph) (let t-s ((Alternativen (Nachfolger Start Graph)))
Die in der let - Anweisung (als named - let stellt es ein Schleifenkonstrukt dar) definierte lokale Variable "Alternativen" bekommt von der Nachfolgerfunktion die Alternativen zum Startknoten übergeben. Der Schleifenkörper besteht allein aus einer Mehrfachverzweigung mit der Funktion cond, in der nacheinander nun die Bedingungen getestet werden.
(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))Graph Bild des Labyrinthes
Eine zusätzliche Erläuterung zu cond:
Nach cond folgt eine Auflistung von Paaren von jeweils [<Bedingung> <Wert bei richtiger Bedingung>] , deren letztes keine Bedingung tragen sollte, sondern mit einem "else" eingeleitet wird. Besonders zu beachten ist dabei, dass diese Bedingungne wie Filter wirken: Die erste passende, also wahre Bedingung beendet die Abarbeitung des cond mit ihrem Wert. Weiter nachfolgende werden nicht mehr geprüft!