Foros del Web » Programación para mayores de 30 ;) » Programación General »

Prolog -> ¿ Como pasar valores de variables de un predicado a otro ?

Estas en el tema de Prolog -> ¿ Como pasar valores de variables de un predicado a otro ? en el foro de Programación General en Foros del Web. inicial(hzog, estado(lado(1, Hombres, Zorras, Ocas, Granos), lado(2, 0, 0, 0, 0), 'orilla 1')):- write('cantidad de Hombres : '), read(Hombres), write('cantidad de Zorras : '), read(Zorras), ...
  #1 (permalink)  
Antiguo 04/05/2006, 06:50
 
Fecha de Ingreso: mayo-2006
Mensajes: 4
Antigüedad: 18 años
Puntos: 0
Pregunta Prolog -> ¿ Como pasar valores de variables de un predicado a otro ?

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

final(hzog, estado(lado(1, 0, 0, 0, 0), lado(2, Hombres, Zorras, Ocas, Granos), 'orilla 2')).

basado en esos estados de que forma le digo al estado final que sus valores de Hombre, Zorras, Ocas y Granos son los mismo que los del estado inicial ???

Como puede ver el fragmento de código consiste en darle solución al clásico problema del Granjero, Lobo, Cabra y Repollo que deben cruzar un río y solo hay un bote, pero este ejercicio tiene la particularidad de que debe resolverse de forma general, o sea que pueden haber cualquier cantidad de Granjeros, Lobos, Cabras y Repollos y que además el bote puede viajar con mayor capacidad si es necesario.

Agradeceré toda la ayuda que pueda brindarme al respecto.
Saludos...
Alain Sánchez
  #2 (permalink)  
Antiguo 04/05/2006, 22:40
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Cual es el prodicado logico de lado y estado

Puedes hacer uso del operador is

Saludos
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #3 (permalink)  
Antiguo 05/05/2006, 15:15
 
Fecha de Ingreso: mayo-2006
Mensajes: 4
Antigüedad: 18 años
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...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:48.