Mañana por la mañana tengo el primer examinador de las prácticas de Lógica Computacional, exámen del cual espero una buena nota y que me salga mejor que los que he hecho esta semana, que ya va siendo hora de salir satisfecho de uno al menos jeje. Por lo demás y como ya viene siendo habitual, me he hecho un resumen con los apuntes tomados en clase y algunas cosillas varias de las transparencias, y como también es habitual ya, aquí os lo dejo.
Revaluación (;): tras instanciar una variable con un valor constante y presionar ; dicha variable se desinstancia y busca un nuevo valor constante con el que instanciarse hasta no encontrar nuevos, que mostrará NO.
Constantes: valores que no cambian. Se escriben entre comillas dobles o comillas simples si se trata de un carácter ASCII y siempre empiezan por minúscula.
padre(’pablo’, ‘juan’). - Muestra Yes o No.
Variables: valores que cambian y que se instancia con valores constantes. Las variables de una regla son locales a esa regla y están cuantificadas universalmente. Puedes estar instanciadas o no instanciadas y en las preguntas y las reglas pueden haber conjunciones, disyunciones y negaciones.
son_hermanos(’Juan’,X) – Muestra los hermanos de Juan en otras reglas e instancia X
son_hermanos(Y,Z) – Muestra todas las combinacios de hermanos.
Variable anónima (_): una variable anónima se usa cuando se desea ignorar algún valor que no es de interés. Nunca se va a instanciar con un valor.
padre(X,_).
X = pablo ;
X = carlos ;
X = pablo ;
Operadores relacionales y aritméticos:
La igualdad (=) compara ambos argumentos si son constantes y devuelve éxito o fracaso. Si los argumentos son variables y uno de ellos no está instanciado, éste se instanciará con el valor del otro argumento. Si ambos están instanciados actua como la igualdad en constantes.
La desigualdad devuelve éxito si ambos argumentos son distintos.
El operador is realiza la tarea de asignador, es decir, si ponemos X is 2+2. y X está sin instanciar, ésta se instanciará con el valor del resultado de la operación aritmética. Si X está instanciada y no coincide con el resultado de la operación devolverá fracaso y viceversa.
En pantalla:
Muestra en pantalla:
write(’Hola mundo’).
Borra pantalla:
write(’\033[2J’).
Dejar lineas en blanco:
write(’\033[20B’).
Deja 20 lineas en blanco (20B)
Deja n columnas en blanco:
write(’\033[5C’), write(’Hola’).
Hola se escribe dejando 5 espacios y mueve el texto a la derecha.
Todo se puede combinar.
Centra mi nombre en pantalla (primero borra, deja 25 lineas en blanco y 45 columnas y luego escribe el texto):
write(’\033[2J’),write(’\033[25B’),write(’\033[45C’),write(’Nombre’).
Saltos de linea:
- write(’Hola’),nl,write(’mundo’).
- write(’Hola\nmundo’).
Instrucciones que se activan nada mas compilar:
:-write(’Hola’).
PREDICADOS DINAMICOS
Añadir y eliminar en tiempo de ejecución.
Sintaxis:
:- dynamic predicado/aridad
Ejemplo:
:- dynamic mujer/1.
Añadir clausulas:
assert/1 - assert(clausula).
Llamada desde el intérprete o desde regla.
Ejemplo:
assert(mujer(clara)).
Borrar cláusula:
retract/1 - retract(clausula).
Ejemplo:
retract(mujer(clara)).
Borrar todos los predicados dinámicos correspondientes:
abolish/1 - abolish(predicado/aridad).
Ejemplo:
abolish(mujer/1).
listing - listing(predicado).
También llamada sin argumentos (muestra BC entera)
Ejemplo:
listing(mujer).
Lee por teclado:
read(arg).
arg = cte o vble(se instancia)
——————————–
Objetivos, éxito, fracaso y revaluación.
casilla(X, Desc), ubicacion(1,X).
repeat
Predicado que siempre tiene exito
Obliga a prolog a reevaluar de donde está en adelante.
dime_hola:-
repeat,
writeln(’Dime hola:’),
read(hola),
write(’hola!!’).
Espera desde teclado un solo caracter:
get_single_char/1.
get_single_char(X).
EJEMPLO PIEDRA, PAPEL O TIJERAS:
objeto(0, piedra).
objeto(1, papel).
objeto(2. tijera).
ganar(piedra, tijera).
ganar(tijera,papel).
ganar(papel,piedra).
quiengana(X, X):-
writeln(’Empatamos’).
quiengana(X, Obj):-
ganar(X, Obj),
writeln(’Tu ganas!’).
quiengana(X, Obj):-
ganar(Obj,X),
writeln(’Yo gano\n).
jugada(X):-
write(’Tu juegas con ‘), writeln(X),
Y is random(3), objeto(Y,Obj),
write(’Yo juego con ‘), writeln(Obj),
quiengana(X, Obj).
Por otra parte estoy planteándome darle un giro de 360º al juego de la oca y diseñarlo de acuerdo a una temática friki/rolera con combates por turnos, PV, maná y demás cosillas de ese estilo (sí, echo de menos las sesiones intensivas de rol xD). Así que cuando termine el curso lo publicaré para futuras generaciones jeje.
Y bueno, ya va tocando ser más aplicado y tomarse más en serio la carrera, de momento terminaré la práctica 2.3 de IB y me pondré a estudiar álgebra como primer plato, ya veremos cuanto duran las buenas intenciones…
Comentarios Recientes