Finden eines Pfades zwischen 2 Punkten in Racket

Ich habe folgende Liste von Verbindungen:

(define routelist
  (list
      (list'a 'b)
      (list'a 'c)
      (list'b 'e)
      (list'b 'f)
      (list'b 'c)
      (list'a 'd)
      (list'e 'f)
      (list'f 'g)))

Routen zwischen 'a' und 'g' sind zu finden. Diese Seite zeigt eine Lösung in Prolog:http: //www.anselm.edu/homepage/mmalita/culpro/graf1.htm

Ich könnte die folgende Lösung verwalten, obwohl sie iterativ ist:

(define (mainpath routelist start end (outl '()))
  (if (equal? start end)
      (println "Same start and end points.")
  (for ((item routelist)) 
    (when (equal? start (list-ref item 0))
          (set! outl (cons start outl))
          (if (equal? end (list-ref item 1))
              (begin 
                ; PATH FOUND:
                (set! outl (cons end outl))
                (println (reverse outl)))
              (begin 
                (mainpath (rest routelist) (list-ref item 1) end outl)
                (set! outl (rest outl))))))))

(mainpath routelist 'a 'g)

Ausgabe

'(a b e f g)
'(a b f g)

ie kann eine funktionierende Lösung in Racket erreicht werde

Antworten auf die Frage(4)

Ihre Antwort auf die Frage