Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
a. Forma extensiva: por cada regla que se aplica, para generar un estado sucesor,
eliminar ésta y todas aquellas que generen ese estado sucesor.
b. Forma compacta: en este caso, no podemos eliminar cada regla que se aplica.
Por lo tanto deberemos tener registrados cada uno de los estados generados y
rechazar las reglas que produzcan un nuevo estado que ya se había generado
anteriormente. Por rechazar una regla queremos significar buscar otra en
lugar de ésa.
1
2. Forma declarativa recursiva general – Caso del espacio de estados especificado en la
forma extensiva. Sea G el grafo ponderado asociado a ese espacio de estados, definido
por G = {conectado(vi,vj,dij)}. Sean V1 y V2 los estados inicial y objetivo,
respectivamente. Para el caso de búsqueda hacia delante, la implementación es:
camino(V1,V2,LV1,LV2,SD1,SD2,CV1,CV2):-
(conectado(V1,VX,DX) ; conectado(VX,V1,DX)), % conexión no dirigida
not esMiembro(VX,LV1), % evitar circuitos
agregado(VX,LV1,LVX), % camino actual
SDX is SD1 + DX, % acumulación distancias
CVX is CV1 + 1, % cuenta vértices
camino(VX,V2,LVX,LV2,SDX,SD2,CVX,CV2). % camino restante
%==============================================
% Predicado Principal con búsqueda hacia delante
%=======================================
camino(V1,V2,LV,SD,CV):- camino(V1,V2,[V1],LVX,0,SD,1,CV),
invertida(LVX,LV).
% Predicados Utilitarios:
esMiembro(X,[X|_ ].
esMiembro(X,[_|T):- esMiembro(X,T).
agregado(X,L,[X|L]).
invertida(L1,L2):- invertida(L1,[],L2).
invertida([],L,L).
invertida([H|T],S1,S2):- invertida(T,[H|S1],S2).
Notar que la lista de vértices LVX de un camino solución tendrá orden inverso al orden
recorrido puesto que el predicado agregado(X,L1,L2) agrega en la cabeza, entonces el
primero en ser agregado será finalmente el último cuando se termine de agregar. Por
eso es que tenemos que invertir el orden de los vértices. Si la búsqueda se realiza
desde el estado objetivo V2 hacia el estado inicial V1, es decir, hacia atrás, no habrá
necesidad de invertir la lista LV:
%================================================
% Predicado Principal con búsqueda hacia atrás en el auxiliar
%================================================
camino(V1,V2,LV,SD,CV):- camino(V2,V1,[V2],LV,0,SD,1,V).