/********************************************************************
(1)--(2) (8)
= = /
(4)--(3)--(5)--(6)
= / \ =
(10) (9) (7)
------------------------------------------------------------------------
PROPUESTO
=========
(1)--(2) (8)
= =
(4)--(3) (5)--(6)
= / =
(10) (9) (7)
*******************************************************************/
DOMAINS
i=integer
li=i*
DATABASE
num(i)
PREDICATES
hecho1(i,i)
busca_hecho1(i,i)
CLAUSES
hecho1(1,2). hecho1(1,3). hecho1(2,5).
hecho1(5,3). hecho1(3,4). hecho1(5,6).
hecho1(6,8). hecho1(6,7). hecho1(5,9).
hecho1(5,7). hecho1(4,10).
busca_hecho1(X,Y):-hecho1(X,Y); hecho1(Y,X).
PREDICATES
camino(i,i,li)
busca(i,i,li,li)
invierte(li,li,li)
pertenece(i,li)
CLAUSES
camino(Inicio,Llegada,Recorre):-busca(Inicio,Llegada,[Inicio],Recor),
invierte(Recor,[],Recorre).
busca(Llegada,Llegada,Recorre,Recorre).
busca(Inicio,Llegada,Recorre,Recor):-busca_hecho1(Inicio,Paso),
not(pertenece(PAso,Recorre)),
busca(Paso,Llegada,[Paso|Recorre],Recor).
%- - - - - - - - - - - - HERRAMIENTAS - - - - - - - - - - - -
invierte([],L,L):-!.
invierte([X|L],L1,L2):-invierte(L,[X|L1],L2).
pertenece(X,[X|_]).
pertenece(X,[_|L]):-pertenece(X,L).