/* Solo funciona con el Trace encendido */
Domains
esp = symbol
esp_lis = symbol *
Predicates
connect(esp,esp)
solve_maze
path(esp_lis,esp_lis)
check_path(esp_lis,esp_lis)
connected_to(esp,esp)
member(esp,esp_lis)
Clauses
connect("Start","2").
connect("2","3").
connect("3","9").
connect("3","4").
connect("9","8").
connect("4","10").
connect("10","16").
connect("16","22").
connect("22","21").
connect("21","15").
connect("15","14").
connect("14","13").
connect("13","7").
connect("7","1").
connect("14","20").
connect("20","26").
connect("26","27").
connect("27","28").
connect("28","29").
connect("29","23").
connect("23","17").
connect("17","11").
connect("11","5").
connect("5","6").
connect("28","34").
connect("34","35").
connect("35","36").
connect("36","30").
connect("30","24").
connect("24","18").
connect("18","12").
connect("34","33").
connect("33","32").
connect("32","31").
connect("31","25").
connect("25","19").
connect("32","Finish").
solve_maze:-path(["Start"],["Start"|Solution]).
path([OldPot|RestPath],Solution):-connected_to(NewPot,OldPot),
not(member(NewPot,RestPath)),
check_path([NewPot|Solution],[NewPot|Solution]).
check_path(_,["Finish"|Solution]):-write(Solution),!.
check_path(Path,Solution):-path(Path,Solution).
connected_to(A,B):-connect(A,B).
connected_to(A,B):-connect(B,A).
member(X,[X|_]).
member(X,[_|Y]):-member(X,Y).
Goal
solve_maze.
               (
geocities.com/v.iniestra/apuntes)                   (
geocities.com/v.iniestra)