Diferencia entre revisiones de «Ejemplo 1»
De Lógica computacional y teoría de modelos (2019-20)
(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:…») |
|||
(No se muestra una edición intermedia del mismo usuario) | |||
Línea 1: | Línea 1: | ||
<source lang = "prolog"> | <source lang = "prolog"> | ||
− | % Definimos las dimensiones del tablero | + | % Definimos las dimensiones del tablero: |
− | #const | + | #const n = 5. |
− | dim(1.. | + | dim(1..n). |
− | % Para cada casilla distinta a (1,1) le asignamos un solo | + | % Para cada casilla distinta a (1,1) le asignamos un solo parent: izquierda, |
− | % | + | % derecha, arriba o abajo. |
− | 1 { | + | 1 {parent(X,Y, 0,-1); parent(X,Y, 1,0); |
− | + | parent(X,Y, -1,0); parent(X,Y, 0,1)} 1 :- dim(X), dim(Y), (X,Y) != (1,1). | |
% Definimos la propiedad alcanzable. Esta se cumple trivialmente en la casilla | % Definimos la propiedad alcanzable. Esta se cumple trivialmente en la casilla | ||
Línea 13: | Línea 13: | ||
% alcanzable también será alcanzable: | % alcanzable también será alcanzable: | ||
alcanzable(1,1). | alcanzable(1,1). | ||
− | alcanzable(X,Y) :- | + | alcanzable(X,Y) :- parent(X,Y,DX,DY), alcanzable(X+DX,Y+DY). |
− | % | + | % La raíz del árbol debe ser alcanzable desde cualquier casilla. |
:- dim(X), dim(Y), not alcanzable(X,Y). | :- dim(X), dim(Y), not alcanzable(X,Y). | ||
− | % | + | % Minimizamos el número de movimientos verticales: |
− | vertical(X,Y) :- | + | vertical(X,Y) :- parent(X,Y,0,1). |
− | vertical(X,Y) :- | + | vertical(X,Y) :- parent(X,Y,0,-1). |
#minimize {X,Y: vertical(X,Y) }. | #minimize {X,Y: vertical(X,Y) }. | ||
% Presentación: | % Presentación: | ||
− | #show | + | #show parent/4. |
+ | |||
+ | |||
</source> | </source> |
Revisión actual del 09:57 3 feb 2020
% Definimos las dimensiones del tablero:
#const n = 5.
dim(1..n).
% Para cada casilla distinta a (1,1) le asignamos un solo parent: izquierda,
% derecha, arriba o abajo.
1 {parent(X,Y, 0,-1); parent(X,Y, 1,0);
parent(X,Y, -1,0); parent(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) :- parent(X,Y,DX,DY), alcanzable(X+DX,Y+DY).
% La raíz del árbol debe ser alcanzable desde cualquier casilla.
:- dim(X), dim(Y), not alcanzable(X,Y).
% Minimizamos el número de movimientos verticales:
vertical(X,Y) :- parent(X,Y,0,1).
vertical(X,Y) :- parent(X,Y,0,-1).
#minimize {X,Y: vertical(X,Y) }.
% Presentación:
#show parent/4.