• Martes 16 de Abril de 2024, 21:32

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - luka_ghost

Páginas: [1]
1
Programación Lógica / Duda -> Predicados
« en: Jueves 4 de Mayo de 2006, 06:35 »
Quisiera preguntarle una duda en base al siguiente fragmento de código :
 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 de las variables del mismo 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... :hola:

2
Programación Lógica / Re: Busqueda Anchura Y Profuncidad
« en: Jueves 4 de Mayo de 2006, 06:19 »
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Patron de la busqueda en profundidad
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% resolver (Id_Problema,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).

% Funcion auxiliar
no_esta(_,[]).
no_esta(X,[Y|Ys]) :-
   X \== Y,
   no_esta(X,Ys).

Tambien puedes hacer uso de esta otra variante :

%Resuelve almacenando en 'FoundPath' los movimientos realizados.
solve(Goal,Goal,FoundPath,FoundPath):- !.
solve(State,_Goal,[_Current|Path],_FoundPath):- member(State,Path),!,fail.
solve(State1,Goal,Path,FoundPath):- proximo_estado(hzog, State1,State2), solve(State2,Goal,[State2|Path],FoundPath).

%LLamada inicial para resolver y escribir todas las posibles soluciones
solution(FoundPath):-   
   inicial(hzog, Start),    
   final(hzog, Goal),
   solve(Start,Goal,[Start],FoundPath).

Espero que te haya servido de ayuda
Saludos... ;)

Páginas: [1]