• Viernes 19 de Abril de 2024, 18:44

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 - noqueteden

Páginas: [1]
1
Programación Lógica / Re: Implementacion De Laberinto En Prolog
« en: Viernes 27 de Mayo de 2005, 03:36 »
Es una buena idea. Muchas gracias. He intentado modelar tu idea de esta forma:

Código: Text
  1.  
  2. %asignacion de valor-literal de la fruta(la pera es 0,el limon es 1,...)
  3. fruta(0,pera).
  4. fruta(1,limon).
  5. fruta(2,kiwi).
  6. fruta(3,lima).
  7. fruta(4,coco).
  8. fruta(5,fresa).
  9. fruta(6,melon).
  10.  
  11. :-
  12. %inicializacion de los booleanos para saber si una fruta se ha usado ya o no
  13. retractall(usado(_,_)),
  14. assert(usado(0,0)),
  15. assert(usado(1,0)),
  16. assert(usado(2,0)),
  17. assert(usado(3,0)),
  18. assert(usado(4,0)),
  19. assert(usado(5,0)),
  20. assert(usado(6,0)),
  21. %inicializacion de las "casillas"(numero(_,_,_))
  22. retractall(numero(_,_,_)),
  23. assert(numero(0,0,nada)),
  24. assert(numero(0,1,nada)),
  25. assert(numero(0,2,nada)),
  26. assert(numero(0,3,nada)),
  27. assert(numero(1,0,nada)),
  28. assert(numero(1,1,nada)),
  29. assert(numero(1,2,nada)),
  30. assert(numero(1,3,nada)),
  31. assert(numero(2,0,nada)),
  32. assert(numero(2,1,nada)),
  33. assert(numero(2,2,nada)),
  34. assert(numero(2,3,nada)),
  35. assert(numero(3,0,nada)),
  36. assert(numero(3,1,nada)),
  37. assert(numero(3,2,nada)),
  38. assert(numero(3,3,nada)).
  39.  
  40. %deberia asignar las 7 frutas que existen en 7 "casillas" al azar.
  41. genera(A) :-       A > 0,
  42.                    random(0,3,X),
  43.                    random(0,3,Y),
  44.                    numero(X,Y,nada),
  45.                    dame_fruta(J),
  46.                    retract(numero(X,Y,nada)),
  47.                    fruta(J,D),
  48.                    assert(numero(X,Y,D)),
  49.                    B is A-1,
  50.                    genera(B).
  51.  
  52. %devuelve aleatoriamente una fruta no usada hasta el momento                  
  53. dame_fruta(J) :-  aleatorio_fruta(J),
  54.                            retract(usado(J,0)),
  55.                            assert(usado(J,1)).
  56.  
  57. %devuelve una fruta no usada              
  58. aleatorio_fruta(J) :- alea(J),no_usado(J).
  59.  
  60. %genera al azar un valor entre 0 y 6(posibles valores de las frutas)
  61. alea(J) :- random(0,6,J).
  62.  
  63. %indica si un elemento de "usado" es 0(no usado)
  64. no_usado(J) :- usado(J,0).
  65.  
  66. %mostrar por pantalla aquellas posiciones que contienen frutas                  
  67. muestra(A,B,J) :-  fruta(_,J),
  68.                             numero(A,B,J).
  69.  
  70.  
  71. %la ejecución por consola deberia ser:
  72. %?- [ej].
  73. %?- genera(7).
  74. %?- muestra(A,B,J).
  75. %Tras lo cual se deberian suceder 7 posiciones de "casillas"(numero(_,_,_))
  76. %con un valor de fruta distinto cada una de ellas.
  77.  
  78.  


El problema es que cuando se genera aleatoriamente un valor para tomar una fruta y esta ya ha sido usada(usado(C,1)) se devuelve falso y por tanto se interrumpe el proceso de asignacion de frutas a "casillas"(numeros).

¿De qué forma podría solucionarlo?

Agradeciendo la respuesta, envio un saludo.

2
Programación Lógica / Re: Implementacion De Laberinto En Prolog
« en: Viernes 27 de Mayo de 2005, 03:35 »
Es una buena idea. Muchas gracias. He intentado modelar tu idea de esta forma:
____________________________________________________________________

%asignacion de valor-literal de la fruta(la pera es 0,el limon es 1,...)
fruta(0,pera).
fruta(1,limon).
fruta(2,kiwi).
fruta(3,lima).
fruta(4,coco).
fruta(5,fresa).
fruta(6,melon).

:-
%inicializacion de los booleanos para saber si una fruta se ha usado ya o no
retractall(usado(_,_)),
assert(usado(0,0)),
assert(usado(1,0)),
assert(usado(2,0)),
assert(usado(3,0)),
assert(usado(4,0)),
assert(usado(5,0)),
assert(usado(6,0)),
%inicializacion de las "casillas"(numero(_,_,_))
retractall(numero(_,_,_)),
assert(numero(0,0,nada)),
assert(numero(0,1,nada)),
assert(numero(0,2,nada)),
assert(numero(0,3,nada)),
assert(numero(1,0,nada)),
assert(numero(1,1,nada)),
assert(numero(1,2,nada)),
assert(numero(1,3,nada)),
assert(numero(2,0,nada)),
assert(numero(2,1,nada)),
assert(numero(2,2,nada)),
assert(numero(2,3,nada)),
assert(numero(3,0,nada)),
assert(numero(3,1,nada)),
assert(numero(3,2,nada)),
assert(numero(3,3,nada)).

%deberia asignar las 7 frutas que existen en 7 "casillas" al azar.
genera(A) :-       A > 0,
                   random(0,3,X),
                   random(0,3,Y),
                   numero(X,Y,nada),
                   dame_fruta(J),
                   retract(numero(X,Y,nada)),
                   fruta(J,D),
                   assert(numero(X,Y,D)),
                   B is A-1,
                   genera(B).

%devuelve aleatoriamente una fruta no usada hasta el momento                  
dame_fruta(J) :-  aleatorio_fruta(J),
                           retract(usado(J,0)),
                           assert(usado(J,1)).

%devuelve una fruta no usada              
aleatorio_fruta(J) :- alea(J),no_usado(J).

%genera al azar un valor entre 0 y 6(posibles valores de las frutas)
alea(J) :- random(0,6,J).

%indica si un elemento de "usado" es 0(no usado)
no_usado(J) :- usado(J,0).

%mostrar por pantalla aquellas posiciones que contienen frutas                  
muestra(A,B,J) :-  fruta(_,J),
                            numero(A,B,J).


%la ejecución por consola deberia ser:
%?- [ej].
%?- genera(7).
%?- muestra(A,B,J).
%Tras lo cual se deberian suceder 7 posiciones de "casillas"(numero(_,_,_))
%con un valor de fruta distinto cada una de ellas.
____________________________________________________________________


El problema es que cuando se genera aleatoriamente un valor para tomar una fruta y esta ya ha sido usada(usado(C,1)) se devuelve falso y por tanto se interrumpe el proceso de asignacion de frutas a "casillas"(numeros).

¿De qué forma podría solucionarlo?

Agradeciendo la respuesta, envio un saludo.

3
Programación Lógica / Re: Implementacion De Laberinto En Prolog
« en: Lunes 23 de Mayo de 2005, 01:10 »
Muchas gracias por la idea. Es interesante. Por cierto necesito generar aleatoriamente la ubicacion de inicio del explorador y la de la salida, ademas de ciertos objetos ubicados en parte del camino. Agradeceria un ejemplo de sencillo de como plasmar eso a nivel de codigo(reglas y hechos).
Muchas gracias anticipadas.

Un saludo.

4
Programación Lógica / Implementacion De Laberinto En Prolog
« en: Viernes 20 de Mayo de 2005, 16:19 »
Hola. Estoy atareado en la implementación de un laberinto en Prolog.
Agradeceria comentarios, idea y sugerencias. Quizas pudiera orientarme codigo fuente sobre algo parecido.
He decidido comenzar por la representación del laberinto y el explorador que debe salir del mismo.
Una de mis dudas es que he de situar de forma aleatoria el explorador en el laberinto y la salida, es decir, en cada ejecución la ubicación del explorador y de la salida es decidida de forma arbitraria(aleatoria) por el programa.

Espero vuestras respuestas.


Muchas gracias.

Páginas: [1]