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?