Encontrar el camino entre 2 puntos en Racket

Tengo la siguiente lista de conexiones:

(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)))

Se encuentran rutas entre 'a y' g. Esta página muestra una solución en Prolog:http://www.anselm.edu/homepage/mmalita/culpro/graf1.html

Podría administrar la siguiente solución, aunque es iterativa:

(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)

Salida:

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

¿Cómo se puede lograr una solución funcional en Racket?

Respuestas a la pregunta(2)

Su respuesta a la pregunta