Нахождение пути между 2 точками в ракетке

У меня есть следующий список подключений:

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

Маршруты между 'a и' g должны быть найдены. На этой странице показано решение в Прологе:http://www.anselm.edu/homepage/mmalita/culpro/graf1.html

Я мог бы справиться со следующим решением, хотя оно итеративное:

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

Выход:

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

Как достичь функционального решения в Racket?

Ответы на вопрос(2)

Ваш ответ на вопрос