Encontrar caminho entre 2 pontos no Raquete

Eu tenho a seguinte lista de conexões:

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

As rotas entre 'a e' g devem ser encontradas. Esta página mostra uma solução no Prolog:http://www.anselm.edu/homepage/mmalita/culpro/graf1.html

Eu poderia gerenciar a seguinte solução, embora seja 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)

Resultado:

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

Como uma solução funcional pode ser alcançada no Racket?