fork download
  1. % ------------------------------------------------------------------------------
  2. % Autor: Ariana Barrera - Diana Gutièrrez
  3. % Fecha: 01/05/2011
  4. % Proyecto Final de Aplicaciòn
  5. % Inteligencia Artificial
  6. % Universidad Rafael Landìvar, Guatemala
  7. % ------------------------------------------------------------------------------
  8.  
  9. % mover(canibal, misionero)
  10. % Aqui seleccionamos una combinaciòn de misionero/canibal para
  11. % poner en el bote y comenzar a validar el estado
  12. mover(1,1). % pasamos un canibal y un misionero
  13. mover(1,0). % pasamos un canibal
  14. mover(0,1). % pasamos un misionero
  15. mover(2,0). % pasamos dos canibales
  16. mover(0,2). % pasamos dos misioneros
  17.  
  18. % estado(CA,MA,CB,MB,P)
  19. % donde:
  20. % CA - Caníbales en la orilla A
  21. % MA - Misioneros en la orilla A
  22. % CB - Caníbales en la orilla B
  23. % MB - Misioneros en la orilla B
  24. % P - Posicion del Bote 0 = A; 1 = B
  25.  
  26. % Movimiento de misioneros y canibales de la orilla A a la B
  27. accion(estado(CA,MA,CB,MB,0),estado(CAF,MAF,CBF,MBF,1)):-
  28. mover(X,Y), % llamamos a la combinacion de Misioneros y Canibales
  29. CAF is CA-X, MAF is MA-Y, % Salen misioneros y canibales de la orilla A
  30. CBF is CB+X, MBF is MB+Y, % Entran misioneros y canibales de la orilla B
  31. CAF >=0, validarPaso(CAF,MAF,CBF,MBF). %Se verifica que el estado sea valido
  32.  
  33. % Movimiento de misioneros y canibales de la orilla B a la A
  34. accion(estado(CA,MA,CB,MB,1),estado(CAF,MAF,CBF,MBF,0)):-
  35. mover(X,Y), % llamamos a la combinacion de Misioneros y Canibales
  36. CBF is CB-X, MBF is MB-Y, % Salen misioneros y canibales de la orilla B
  37. CAF is CA+X, MAF is MA+Y, % Entran misioneros y canibales de la orilla B
  38. CBF >=0, validarPaso(CAF,MAF,CBF,MBF). %Se verifica que el estado sea valido
  39.  
  40. % Validamos los valores resultantes de caníbales y
  41. % misioneros luego de un posible paso
  42. validarPaso(CAF,MAF,CBF,MBF):- MAF > 0, MBF>0, CAF =<MAF, CBF =<MBF.
  43. % Existan misioneros en ambas orillas, Canibales en A y B < Misioneros en A y B
  44. validarPaso(_,MAF,CBF,MBF):- MAF = 0, MBF>0, CBF =<MBF.
  45. % Ya se pasaron todos los misioneros a B, que haya por lo menos uno en B,Canibales en B < Misioneros en B
  46. validarPaso(CAF,MAF,_,MBF):- MAF > 0, MBF=0, CAF =<MAF.
  47. % Exista por lo menos 1 misionero en A, No hayan misioneros en B, Canibales en A < Misioneros en A
  48. validarPaso(_,MAF,_,MBF):- MAF = 0, MBF=0.
  49. % No existan misioneros ni en A ni en B
  50.  
  51. % estado final
  52. % Es el estado final del algoritmo, cuando el numero de Misioneros y Canibales
  53. % ingresado al inicio ya se encuentra en la orilla B
  54. estadoFinal(estado(_,_,CM,CM,1)).
  55.  
  56. % predicados de manejo de listas
  57. pertenece(X,[X|_]). % La cabeza de la lista sea el elemento que buscamos.
  58. pertenece(X,[_|Ls]):-pertenece(X,Ls). % si no lo es, ignora la cabeza y se vuelve a llamar
  59.  
  60. insertarFinal([],X,[X]). % Predicados para insertar al final de la lista de estados
  61. insertarFinal([L|Ls],X,[L|R]):-insertarFinal(Ls,X,R).
  62.  
  63. % algoritmo de búsqueda en profundidad
  64. busquedaProf(S,V,V):- estadoFinal(S). % Cuando la busqueda en profundidad
  65. busquedaProf(S,V,LS):- accion(S,NS), % Predicado para llamar a la validacion de estados
  66. not(pertenece(NS,V)), % Ver que no exista el estado en la lista
  67. insertarFinal(V,NS,NV), % Actualizo la lista de estados visitados
  68. busquedaProf(NS,NV,LS).% Se pasa al siguiente estado
  69.  
  70. % predicado a llamar para la ejecucciòn del algoritmo
  71. resolverCanMis(CM,S):- busquedaProf(estado(CM,CM,0,0,0),[estado(CM,CM,0,0,0)],S).
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:1: error: class, interface, or enum expected
% ------------------------------------------------------------------------------
^
Main.java:24: error: class, interface, or enum expected
% P  - Posicion del Bote 0 = A; 1 = B
                                ^
Main.java:52: error: class, interface, or enum expected
% Es el estado final del algoritmo, cuando el numero de Misioneros y Canibales
^
Main.java:52: error: class, interface, or enum expected
% Es el estado final del algoritmo, cuando el numero de Misioneros y Canibales
                     ^
Main.java:60: error: class, interface, or enum expected
insertarFinal([],X,[X]). % Predicados para insertar al final de la lista de estados
                                                             ^
5 errors
stdout
Standard output is empty