/* 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.

    Source: geocities.com/v.iniestra/apuntes/pro_log

               ( geocities.com/v.iniestra/apuntes)                   ( geocities.com/v.iniestra)