Investigacion de Prolog

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 10

Instituto:

Instituto Tecnológico Superior de Misantla

Alumno:

Alejandro Limón Téllez

CARRERA:

Ingeniería en Sistemas Computacionales.

GRUPO:

603.

Tema:

Investigación de PROLOG

MATERIA:

Programación Lógica y Funcional

Fecha:

04 de Mayo del 2020


INDICE

Operadores aritméticos y relacionales. ................................................................... 1

Predicados y funciones predefinidas. ...................................................................... 2

Adición de Bases de Conocimiento externas:...................................................... 2

Construcción de objetivos compuestos (conectivas lógicas): .............................. 2

Clasificación de términos: .................................................................................... 2

Control del programa: .......................................................................................... 3

Funciones aritméticas: ......................................................................................... 3

Manejo de listas: .................................................................................................. 4

Predicados de Entrada y Salida: .......................................................................... 4

Manejo de ficheros: ............................................................................................. 5

Manipulación de la Base de Conocimiento: ......................................................... 5

Construcción y acceso a componentes de estructuras: ....................................... 6

Depuración de programas Prolog: ....................................................................... 6

Reglas recursivas .................................................................................................... 7

Referencias ............................................................................................................. 8

i
Operadores aritméticos y relacionales.

Todas las versiones de Prolog soportan los siguientes operadores aritméticos,


listados en el orden de prioridad de ejecución.

1. X=Y Se cumple si puede hacer X e Y iguales (unificarlos)


2. X\=Y Se cumple si X=Y fracasa
3. X==Y Igualdad más estricta
4. X\==Y Se cumple si fracasa ==
5. X < Y Predicado menor que
6. X > Y Predicado mayor que
7. X >= Y Predicado mayor o igual que
8. X =< Y Predicado menor o igual que
9. X @< Y Ordenación de términos. Predicado menor que
10. X @> Y Ordenación de términos. Predicado mayor que
11. X @>= Y Ordenación de términos. Predicado mayor o igual que
12. X @=< Y Ordenación de términos. Predicado menor o igual que
13. X is Y Se evalúa la expresión a la que esta instanciada Y para dar como
resultado un número, que se intentará hacer coincidir con X
14. X is_string Y Se evalúa la expresión a la que está instanciada Y para dar
como resultado una cadena, que se intentará hacer coincidir con X
15. X & Y Operador concatenación de cadenas de caracteres
16. X + Y Operador suma
17. X - Y Operador resta
18. X * Y Operador de multiplicación
19. X / Y Operador de división
20. X // Y Operador de división entera
21. X mod Y Operador de resto de la división entera
22. X ** Y Operador de exponenciación
23. X ^ Y Operador de exponenciación
24. op(X,Y,Z) Declara el operador de nombre Z con clase de precedencia X y

1
posición-asociatividad Y
25. current_op(X,Y,Z) Busca el operador ya declarado de nombre Z con clase
de precedencia X y posición-asociatividad Y

Los paréntesis se pueden utilizar para dar preferencia de ejecución en una


expresión compuesta. Prolog utiliza la precedencia de operadores con la regla de la
mano izquierda.

Predicados y funciones predefinidas.

Adición de Bases de Conocimiento externas:

 consult(X) Añadir las cláusulas del fichero X a la base de conocimiento


 reconsult(Y) Las cláusulas leídas de fichero Y sustituyen a las existentes
para el mismo predicado
 [X,-Y,Z] Notación más cómoda para consult y reconsult
 Halt Salir del sistema Prolog

Construcción de objetivos compuestos (conectivas lógicas):

 X,Y Conjunción de objetivos


 X;Y Disyunción de objetivos
 \+ X Se cumple si fracasa el intento de satisfacer X
 not(X) Se cumple si fracasa el intento de satisfacer X

Clasificación de términos:

 var(X) Se cumple si X es en ese momento una variable no instanciada


 nonvar(X) Se cumple si X no es una variable sin instanciar en ese
momento
 atomic(X) Se cumple si X representa en ese momento un número o un
átomo
 atom(X) Se cumple si X representa en ese momento un átomo de Prolog

2
 numeric(X) Se cumple si X representa en ese momento un número
 integer(X) Se cumple si X representa en ese momento un número entero
 real(X) Se cumple si X representa en ese momento un número real

Control del programa:

 true Objetivo que siempre se cumple


 fail Objetivo que siempre fracasa
 ! Corte. Fuerza al sistema Prolog a mantener ciertas elecciones
 repeat Sirve para generar soluciones múltiples mediante el mecanismode
reevaluación
 X -> Y Si X entonces Y. En combinación con ; actúa como Si-
EntoncesSino.
 call(X) Se cumple si tiene éxito el intento de satisfacer X (instanciada aun
término)

Funciones aritméticas:

 abs(X) Devulve el valor absoluto de la expresión X


 sign(X) Devuelve -1 si X < 0, 1 si X > 0 y 0 si X = 0
 min(X,Y) Devuelve el menor de Xe Y
 max(X,Y) Devuelve el mayor de Xe Y
 random(X) Devuelve un entero aleatorio i ( 0 =< i < X ); la es determinada
por el reloj del sistema cuando se arranca SWI-Prolog
 round(X) Evalua la expresión X y la redondea al entero más cercano
 integer(X) Evalua la expresión X y la redondea al entero más cercano
 float(X) Evalua la expresión X en un número en coma flotante
 truncate(X) Trunca la expresión X en un número entero
 floor(X) Devuleve el mayor número entero menor o igual que el resultado
de la expresión X
 ceiling(X) Devuleve el menor número entero mayor o igual que el
resultado de la expresión X
 sqrt(X) Raíz cuadrada de la expresión X

3
 sin(X) Seno de la expresión X (angulo en radianes)
 cos(X) Coseno de la expresión X (angulo en radianes)
 tan(X) Tangente de la expresión X (angulo en radianes)
 asin(X) Arcoseno (angulo en radianes) de la expresión X
 acos(X) Arcocoseno (angulo en radianes) de la expresión X
 atan(X) Arcotangente (angulo en radianes) de la expresión X
 log(X) Logaritmo neperiano de la expresión X
 log10(X) Logaritmo en base 10 de la expresión X
 exp(X) e elevado al resultado de la expresión X
 pi Constante matemática pi (3.141593)
 e Constante matemática e (2.718282)

Manejo de listas:

 [X|Y] X es la cabeza de Y la cola de la lista


 is_list(X) Se cumple si X es una lista o la lista vacía []
 append(X,Y,Z) Z es la concatenación de las listas X e Y
 member(X,Y) X es uno de los elementos de la lista Y
 delete(X,Y,Z) Borra el elemento Y de la lista X y da como resultado la
lista Z
 select(X,Y,Z) Selecciona el elemento X de la lista Y y da como resultado
la lista Z
 nth0(X,Y,Z) El elemento X-ésimo de la lista Y es Z (empezando en 0)
 nth1(X,Y,Z) El elemento X-ésimo de la lista Y es Z (empezando en 1)
 last(X,Y) X es el último elemento de la lista Y
 reverse(X,Y) Y es la lista invertida de X
 length(X,Y) Y es la longitud de la lista X
 merge(X,Y,Z) Siendo X e Y listas ordenadas, Z es la lista ordenada con
los elementos de ámbas
 sort(X,Y) Y es la lista ordenada de X (sin elementos duplicados)
 msort(X,Y) Y es la lista ordenada de X

Predicados de Entrada y Salida:

4
 get0(X) Se cumple si X puede hacerse corresponder con el siguiente
carácter encontrado en el canal de entrada activo (en código ASCII)
 get(X) Se cumple si X puede hacerse corresponder con el siguiente
carácter imprimible encontrado en el canal de entrada activo
 skip(X) Lee y pasa por alto todos los caracteres del canal de entrada
activo hasta que encuentra un carácter que coincida con X
 read(X) Lee el siguiente término del canal de entrada activo
 put(X) Escribe el entero X como un carácter en el canal de salida activo
 nl Genera una nueva línea en el canal de salida activo
 tab(X) Escribe X espacios en el canal de salida activo
 write(X) Escribe el término X en el canal de salida activo
 write_ln(X) Escribe el término X en el canal de salida activo y salta la
línea
 writef(X,Y) Escribe en el canal de salida activo, siendo X el formato e Y
la lista con los argumentos a escribir
 display(X) Escribe el término X en el canal de salida activo, pasando por
alto las declaraciones de operadores

Manejo de ficheros:

 see(X) Abre el fichero X y lo define como canal de entrada activo


 seeing(X) Se cumple si el nombre del canal de entrada activo coincide
con X
 seen Cierra el canal de entrada activo, y retorna al teclado
 tell(X) Abre el fichero X y lo define como canal de salida activo
 telling(X) Se cumple si X coincide con el nombre del canal de salida
activo
 told Cierra con un fin de fichero el canal de salida activo, que pasa a ser
la pantalla

Manipulación de la Base de Conocimiento:

 listing Se escriben en el fichero de salida activo todas las cláusulas

5
 listing(X) Siendo X un átomo, se escriben en el fichero de salida activo
todas las cláusulas que tienen como predicado dicho átomo
 clause(X,Y) Se hace coincidir X con la cabeza e Y con el cuerpo de una
cláusula existente en la base de conocimiento
 assert(X) Permite añadir la nueva cláusula X a la base de conocimiento
 asserta(X) Permite añadir la nueva cláusula X al principio de la base de
conocimiento
 assertz(X) Permite añadir la nueva cláusula X al final de la base de
conocimiento
 retract(X) Permite eliminar la primera cláusula de la base de
conocimiento que empareje con X
 retractall(X) Permite eliminar todas las cláusulas de la base de
conocimiento que emparejen con X
 abolish(X) Retira de la Base de Conocimiento todas las cláusulas del
predicado X
 abolish(X,Y) Retira de la Base de Conocimiento todas las cláusulas del
predicado de nombre X y número de argumentos Y

Construcción y acceso a componentes de estructuras:

 functor(E,F,N) E es una estructura con nombre F y número de


argumentos N
 arg(N,E,A) El argumento número N de la estructura E es A
 E=..L Predicado univ. L es la lista cuya cabeza es el functor de la
estructura E y la cola sus argumentos
 name(A,L) Los caracteres del átomo A tienen por ASCII los números
de la lista L

Depuración de programas Prolog:

 trace Activación de un seguimiento exhaustivo, generando la traza de


la ejecución de las metas siguientes
 trace(X) Activación de un seguimiento del predicado X

6
 notrace Desactiva el seguimiento exhaustivo
 notrace(X) Desactiva el seguimiento mientras dure la llamada al
objetivo X
 spy(X) Fijación de puntos espía en el predicado X
 nospy(X) Elimina los puntos espía especificados
 nospyall Elimina todos los puntos espía
 debugging Ver el estado del depurador y los puntos espía se han
establecido hasta el momento
 debug Inicia el depurador
 nodebug Desactiva el depurador

Reglas recursivas

En general, en una definición recursiva, es necesario considerar 2 casos:

Caso básico: Define cuándo se detiene el cálculo.

Caso recursivo: Suponiendo que ya se ha solucionado un caso más simple, define


cómo descomponer el caso actual hasta llegar al caso básico.

Por ejemplo:

predecesor(X,Y):-progenitor(X,Y). %caso base

predecesor(X,Y):-progenitor(X,Z), predecesor(Z,Y). %caso recursivo

Las definiciones recursivas se resuelven de la misma forma que las reglas


comunes. En la traza de este tipo de definiciones tiene especial importancia el
renombramiento de variables.

7
Referencias

 Prolog. (2016, mayo 3). Recuperado 4 de 2020, de


http://www.dccia.ua.es/logica/prolog/docs/prolog.pdf?fbclid=IwAR07n8OtzKI
M6mjaHftsWtI8CoYA7z9UvbfhLj4aIvCvqDEewGO414lncJE

 Zavaleta, J. M. (2015, marzo 26). Predicados y funciones en prolog.


Recuperado 5 de julio de 2016, de
http://fcqi.tij.uabc.mx/usuarios/ardiaz/material/manual_lab_prolog.pdf

 Martinez, J. P. (2010, mayo 23). Introduccion a Prolog. Recuperado 13 de


junio de 2018, de https://ccc.inaoep.mx/~emorales/Cursos/Prolog/curso.pdf

También podría gustarte