Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/05/2006, 15:15
luka_ghost
 
Fecha de Ingreso: mayo-2006
Mensajes: 4
Antigüedad: 18 años, 10 meses
Puntos: 0
Mensaje Prolog -> Como pasar valores de un predicado a otro

Mira, la idea es que estoy en un estado donde puedo tener dos lados con varios integrantes en cada uno o puedo tener una lado con todos y el otro sin ninguno, probe hacer los siguiente :

inicial(hzog, estado(lado(1, Hombres, Zorras, Ocas, Granos), lado(2, 0, 0, 0, 0), 'orilla 1')):-
write('cantidad de Hombres : '), read(Hombres),% nl,
write('cantidad de Zorras : '), read(Zorras), %nl,
write('cantidad de Ocas : '), read(Ocas), %nl,
write('cantidad de Granos : '), read(Granos). %nl,


final(hzog, estado(lado(1, 0, 0, 0, 0), lado(2, Hombres, Zorras, Ocas, Granos), 'orilla 2')):-
inicial(_,estado(lado(_,H,Z,O,G), _,_)), Hombres is H,
Zorras is Z, Ocas is O, Granos is G.

pero al realizar la llamada del estado inicial todo, bien pq los datos son recividos perfectamente, pero cuando se realiza la llamada del estado final tengo que volver a intruducir los datos del estado final y eso asi no tiene sentido, he aqui la forma en que llamo a ambos estados:
%metodo 1 de encontrar la solucion
solution(FoundPath):-
inicial(hzog, Start),
final(hzog, Goal),
solve(Start,Goal,[Start],FoundPath),
print_path(FoundPath),fail;true.

%metodo 2 de encontrar la solucion
resolver(Problema,[Eo|Solucion]) :-
inicial(Problema,Eo),
resolver(Problema,Eo,[Eo],Solucion).

% resolver(Id_Problema,Ei,Visitados,Solucion)
resolver(Problema,En,_,[]) :-
final(Problema,En).

resolver(Problema,Ei,Visitados,[En|Es]) :-
proximo_estado(Problema,Ei,En),
no_esta(En,Visitados),
resolver(Problema,En,[En|Visitados],Es).

Espero que puedas ayudarme al respecto....
Saludos...