Ejemplo 1
De Lógica computacional y teoría de modelos (2019-20)
Revisión del 15:53 12 feb 2019 de Mjoseh (discusión | contribuciones) (Página creada con «<source lang = "prolog"> % Definimos las dimensiones del tablero #const anchura = 5. dim(1..anchura). % Para cada casilla distinta a (1,1) le asignamos un solo movimiento:…»)
% Definimos las dimensiones del tablero
#const anchura = 5.
dim(1..anchura).
% Para cada casilla distinta a (1,1) le asignamos un solo movimiento: izda,
% dcha, arriba o abajo.
1 {mueve(X,Y, 0,-1); mueve(X,Y, 1,0);
mueve(X,Y, -1,0); mueve(X,Y, 0,1)} 1 :- dim(X), dim(Y), (X,Y) != (1,1).
% Definimos la propiedad alcanzable. Esta se cumple trivialmente en la casilla
% (1,1), y cualquier casilla desde la cual se haga un movimiento a una casilla
% alcanzable también será alcanzable:
alcanzable(1,1).
alcanzable(X,Y) :- mueve(X,Y,XP,YP), alcanzable(X+XP,Y+YP).
% Obligamos a que la raíz del árbol sea alcanzable desde cualquier casilla
:- dim(X), dim(Y), not alcanzable(X,Y).
% Nos van a interesar las soluciones que tengan pocos desplazamientos verticales.
vertical(X,Y) :- mueve(X,Y,0,1).
vertical(X,Y) :- mueve(X,Y,0,-1).
#minimize {X,Y: vertical(X,Y) }.
% Presentación:
#show mueve/4.