Está en la página 1de 12

Actividad

REPORTE DE CURSO EN LINEA PROLOG

NOMBRE: DULCE ANDREA SYLLAS GUEVARA.


NOMBRE DEL CURSO: PROGRAMACIÓN LÓGICA Y FUNCIONAL
NOMBRE DEL TUTOR: ISC. JORGE LUIS ALONSO MORENO (JLALONSO_DEPAD_MQ@HOTMAIL.COM).
NOMBRE DE LA ASESORA: ISC. LUCIA RIVERA RIVERA
LUGAR: COLÓN, QUERÉTARO, MÉXICO.
FECHA:07 DE MAYO DE 2018.
Prolog es un lenguaje de programación que está basado en el paradigma de programación de lógica.

Las principales características de éste son:

-Es declarativo: Se tiene que especificar como es el problema a resolver y las soluciones.

-Está basado en la recursión (los bucles no son normalmente empleados).

-Hace relaciones entre elementos para crear el entorno.

-Usa la unificación

Prolog surgió a finales de los años 60 y principio de los 70, el propósito de este no era ser lenguaje de
programación sino procesar un lenguaje natural (francés). Su primera versión estable fue presentada a
final de 1972 por Colmeraurer y Roussel. En 1977 Warren presentó el primer compilador de Prolog y
después desarrollo una máquina abstracta destinada a la ejecución de Prolog

(WAM). Algunos intérpretes son: Amzi! Prolog!, B-Prolog, Ciao Prolog y SWI-Prolog. Este último será con
el cual utilizaremos ya que es un intérprete libre, robusto y fácil de manejar.

Los programas en Prolog son escritos en ficheros de texto con extensión .pl y cargados como podemos
ver a continuación:

Los átomos son términos compuestos por letras mayúsculas, minúsculas, números, guiones bajos (_),
más (+), guion intermedio (-), arroba (@), entre otros símbolos, además de los términos que están entre
comillas simples. Deben comenzar por letra minúscula. Hay algunos átomos que tienen significado
predefinido en Prolog.

Prolog define números enteros.

Las variables son términos compuestos por letras, números y guiones bajos (_). Deben comenzar con
mayúscula o guion bajo.
Los términos complejos son denominados como estructuras, los átomos, números, y variables permiten
su definición. Es un funtor acompañado por una secuencia de argumentos estos últimos van en
paréntesis separados por comas. Los funtores son átomos.

En los programas de prolog se traducen los conceptos existentes (lenguaje natural) en lenguaje de
primer orden. Estan compuestos por un conjunto de capsulas que pueden ser de tres tipos: Hechos
(declaran cosas que son siempre ciertas), reglas (declaran cosas que son condicionalmente ciertas),
consultas (preguntas realizadas por parte del usuario acerca de que cosas son ciertas).

Satisfacer objetivos: comprender la manera de resolución de las consultas realizadas a través del
interprete permite reducir el esfuerzo empleado en la escritura y entendimiento. En la consulta:

? padre(X,Y), mujer(Y), propietario(X).

Se tratara de satisfacer los objetivos establecidos en la consulta de izquierda a derecha, en la primera


parte (padre(X,Y)) trata de enlazar las variables a valores concretos establecidos en base al
conocimiento, buscando ordenadamente de arriba a abajo en la base de conocimiento. La secuencia de
objetivos es satisfecha siempre que todos y cada uno de los objetivos individuales tengan éxito. Si
resulta exitoso se devuelve como valores lo que puedan tomar las variables empleadas. Elementos como
variables, números, listas, etc. No pueden emplearse aisladamente como objetivos a satisfacer. Toda
conclusión que no pueda ser probada a partir de los hechos y reglas establecidas en la base de
conocimiento se considera falsa por defecto.

La unificación es para realizar emparejamiento de objetivos y cláusulas, normalmente una o más


variables están involucradas aquí, se persigue obtener términos iguales.

Si los términos son constantes hay que comprobar si son el mismo término. Si lo son, la unificación tiene
éxito. En otro caso, la unificación falla.

Si los términos son compuestos hay que comprobar en primer lugar sus funtores y aridades. Si tienen el
mismo funtor y aridad, hay que comprobar si los argumentos unifican por pares. Si esto sucede, la
unificación tiene éxito. En otro caso, la unificación falla.

La recursión es la manera en la que la especificación de un determinado proceso del mundo real se basa
en sí misma. En Prolog es muy importante para la definición de predicados, hay dos tipos:

-Recursión directa: Un predicado pred está definido en base a sí mismo

-Recursión indirecta: Un predicado pred1 está definido en base al predicado pred2, el cual a su vez está
definido en base al predicado pred3, el cual está definido en base al predicado pred1.

A continuación, algunos ejemplos:


El objetivo del predicado Fibonacci es calcular la sucesión de Fibonacci. Esta sucesión viene definida por
la siguiente expresión matemática:

Debe tener dos argumentos:

El número n y el resultado de la sucesión para el número n establecido como

primer argumento.

Objetivo: calcular el máximo común divisor de dos números. Debe tener tres argumentos:
El primero de los números cuyo máximo común divisor se desea

Calcular. El segundo de los números cuyo máximo común divisor se desea. Calcular el máximo común
divisor de los números anteriormente definidos.

Una lista en Prolog es una estructura de datos que nos permite almacenar cualquier tipo d elemento
definido en el lenguaje: constantes, variables y estructuras. Para definir las listas se encierran sus
elementos entre corchetes, se separan por comas, su longitud estará determinada por el número de
elementos, de estos últimos puede contener un número finito de elementos pudiendo ser a su vez listas,
hay una lista que no tiene elementos a esta se le denomina lista vacía. Las listas que contienen
elementos se pueden descomponer en cabeza y cola. La cabeza de la lista es el primer elemento que
contiene, y la cola son todos los elementos restantes. El operador más importante para la manipulación
de las listas en Prolog es “|” está destinado a realizar la descomposición de una lista en su cabeza y su
cola. Aquí hay ejemplos de su uso:
Podemos también consultar un solo elemento de la lista

Pero también se puede hacer de manera más sencilla, para evitar información adicional que no
requerimos.

También se pueden extraer elementos de listas anidadas.


El predicado member(es para determinar si un elemento está en la lista) debe tener dos
argumentos: el elemento a buscar y la lista en la que buscar.

Un elemento está en una lista si es el primer elemento de la misma.

Se puede expresar en Prolog con el siguiente hecho:

Member (Elemento, [Elemento | Cola]).

Un elemento está en una lista en la que no es su cabeza si está en la cola de la misma.

Esto puede expresarse a través de la

siguiente regla:

member (Elemento, [Cabeza | Cola]) :-member(Elemento, Cola).

A continuación, ejemplos:
El predicado deleteAll es para eliminar un elemento de una lista. Debe tener a lista en la que queremos
eliminar, el elemento a eliminar, la lista obtenida al haber eliminado el elemento.

Si la lista se encuentra vacía, cualquier elemento que se quiera eliminar da como resultado otra lista
vacía. deleteAll( [ ],_ , [ ] ).

Si el elemento a eliminar es el primero de la lista, la lista resultante no se ve afectada en forma alguna,


se procede a eliminar el elemento de la cola de la lista.

deleteAll([Cabeza | Cola], Elemento, Resultado)

:- Cabeza = Elemento,

deleteAll(Cola, Elemento, Resultado).

Si el elemento a eliminar no es el primero de la lista, la lista resultante debe tener como cabeza ese
mismo elemento dado que no va a eliminarse.

deleteAll([Cabeza | Cola],Elemento,[Cabeza | Resultado])

:- dif(Cabeza, Elemento),

deleteAll(Cola,Elemento,Resultado)

El predicado append definir un predicado en Prolog que concatene dos listas de elementos

Debe tener tres argumentos: La primera de las listas a cuyos elementos van a concatenarse los

de la siguiente lista, la segunda de las listas cuyos elementos van a ser concatenados a

los de la anterior lista, la lista obtenida al haber concatenado los elementos de las dos

listas anteriores.

A continuación, ejemplos:
Librería lists.pl proporciona un amplio conjunto de predicados destinados

a la manipulación de listas en Prolog.

Hoy en día facilita las tareas relativas a la manipulación de operaciones aritméticas mediante el empleo
de notación similar a la familiar para muchos usuarios. Basa la gestión de las operaciones aritméticas
fundamentalmente a través del predicado predefinido en el lenguaje is, es un predicado infijo, así que
debe ser empleado entre dos argumentos, normalmente el situado a la izquierda es una variable no
enlazada mientras que el argumento situado a la derecha es una expresión aritmética o un número.
A continuación, podemos ver los principales operadores aritméticos

disponibles en Prolog:

X + Y: la suma de X e Y

X - Y: la diferencia de X e Y

X * Y: el producto de X e Y

X / Y: el cociente de X e Y

X // Y: el cociente entero de X e Y. El resultado es truncado al entero más cercano

X mod Y: el resto del cociente cuando X es dividido por Y

X^Y: el valor de X a la potencia de Y

-X: el negativo de X

Principales funciones aritméticas disponibles en Prolog:

abs(X): el valor absoluto de X

sin(X): el seno de X

cos(X): el coseno de X

max(X, Y): el valor mayor de X e Y

round(X): el valor de X redondeado al entero m as cercano

sqrt(X): la raíz cuadrada de X

El predicado factorial permite definir un predicado en Prolog que permita calcular el valor

factorial de un número entero dado.

Debe contener: el entero cuya factorial desea calcularse y el valor factorial del número indicado en el
primer argumento.

Esto significa que cuando el primer argumento establecido en el predicado es el entero 0, el segundo
argumento debe tomar el valor 1. factorial (0, 1).

El valor factorial de un entero positivo N es N multiplicado por la factorial del entero N-1. En Prolog
debemos plantear una regla que en primer lugar compruebe que el primer argumento sea un entero
positivo, luego calculamos el valor N-1, calculamos la factorial del entero N-1 (denotado como F1) y
finalmente calculamos el valor factorial de N. factorial(N, F) :- N > 0, N1 is N-1, factorial(N1, F1), F is N *
F1.
File consult, abrir el que quieres, punto para error y consulta

También podría gustarte