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?