Вы находитесь на странице: 1из 3

PONTIFICIA PONTIFICIA

UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática

Capítulo 4 – PROLOG Capítulo 4 – PROLOG


4.1 – Introducción 4.1 – Introducción

PROLOG es un lenguaje declarativo e interpretado, en este tipo de lenguajes se Un programa Prolog está constituido por un conjunto de cláusulas de Horn. Una
representan los conocimientos sobre un determinado dominio y sus relaciones. cláusula de Horn tiene la forma general:
A partir de ese conocimiento, se deducen las respuestas a las preguntas p(t1,t2,….,tn) :- p1(….),p2(….),…,pm(….) con m >= 0
planteadas, es decir se obtiene una inferencia.
Donde tanto p como las pi son símbolos predicados con sus argumentos entre
El conocimiento se formaliza mediante un conjunto de relaciones que describen paréntesis. A los argumentos de un predicado se les denomina Términos.
de forma simultánea las propiedades y sus interacciones.
Se declara el conocimiento disponible acerca de: Las cláusulas de Horn son expresiones condicionales, siendo el símbolo “:-” el
condicional o símbolo de la implicación (normalmente en lógica se utiliza el
OBJETOS:
propiedades
símbolo “ ”) . ⇒
relaciones Así la cláusula anterior podría leerse de la siguiente forma:
“SI p1(….) Y p2(….) Y … Y pm(….) ENTONCES p(t1,t2,…,tn)”
REGLAS, que determinan interacciones lógicas del tipo: si ocurre q, r, s y t
entonces P

Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica
Ricardo Soto De Giorgis Informática Ricardo Soto De Giorgis Informática

PONTIFICIA PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática

Capítulo 4 – PROLOG Capítulo 4 – PROLOG


4.1 – Introducción 4.2 – Cláusulas
Un programa en Prolog está constituido por una secuencia de cláusulas. Estas
Cuando m=0, la cláusula no tiene parte derecha, en este caso diremos que se
cláusulas deben representar todo el conocimiento necesario para resolver el
trata de un hecho o afirmación.
problema.
p(t1,t2,…,tn).
Se pueden diferenciar tres tipos de Cláusulas:
Cuando la cláusula no tiene parte izquierda (o cabeza), se tiene pregunta, este
Hechos (afirmaciones), se pueden representar:
tipo de cláusulas se utilizan para realizar la entrada/salida del programa:
Objetos
Propiedades de objetos
?p1(….),p2(….),…,pm(….) Relaciones entre objetos
Reglas.
Consultas.

Cada cláusula puede estar formada por uno o varios predicados. Las
cláusulas deben terminar obligatoriamente en punto.

Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica
Ricardo Soto De Giorgis Informática Ricardo Soto De Giorgis Informática

PONTIFICIA PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática

Capítulo 4 – PROLOG Capítulo 4 – PROLOG


4.3 – Hechos 4.3 – Hechos

Es el mecanismo básico para representar: Ejemplo


objetos/personas/conceptos. padre(luis).
propiedades de los objetos. padre_de(luis, pedro).
relaciones entre los objetos. azul(cielo).

Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica
Ricardo Soto De Giorgis Informática Ricardo Soto De Giorgis Informática

1
PONTIFICIA PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática

Capítulo 4 – PROLOG Capítulo 4 – PROLOG


4.4 – Consultas 4.4 – Consultas
Es el mecanismo para extraer conocimiento del programa.
Por ejemplo si Vicente busca amigos/as de mis amigos que sean
millonarios/as y estén solteros/as:

Una consulta estará constituida por una o varias metas que Prolog deberá
resolver. El intérprete de Prolog nos devuelve más soluciones si utilizamos el
punto y coma “;”

Cuando no existen más soluciones que unifiquen con el objetivo, el intérprete


contesta No.

Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica
Ricardo Soto De Giorgis Informática Ricardo Soto De Giorgis Informática

PONTIFICIA PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática

Capítulo 4 – PROLOG Capítulo 4 – PROLOG


4.5 – Reglas 4.6 – Equiparación
Permiten establecer relaciones más elaboradas entre objetos, por ejemplo, Por ejemplo, si una variable está libre y es equiparada con un valor numérico, se
relaciones causa-efecto. obtiene una instanciación (asignación) de la variable con dicho valor.
Este mecanismo permite comprobar si dos expresiones son equivalentes,
padre_de(juan, jose).
produce como resultado una sustitución de términos cuando esta es posible.
familiares(pedro, miguel).
hermanos(enrique,jose). Ejemplos:
familiares(X, Y) :- padre_de(X, Y). amigos(pedro, vicente) y amigos(pedro, vicente)
familiares(X, Y) :- padre_de(Y, X). son equiparables.
familiares(X, Y) :- hermanos(Y, X). amigos(pedro, vicente) y amigos(X, vicente)
familiares(X, Y) :- hermanos(Y, X). son equiparables. X = pedro.
amigos(pedro, Y) y amigos(X, vicente)
son equiparables. X = pedro, Y = vicente.
amigos(X, X) y amigos(pedro, vicente)
no son equiparables porque X = pedro, X = vicente no es posible.

Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica
Ricardo Soto De Giorgis Informática Ricardo Soto De Giorgis Informática

PONTIFICIA PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática

Capítulo 4 – PROLOG Capítulo 4 – PROLOG


4.7 – Desigualdad 4.8 – Igualdad y asignación

Para comprobar si dos términos son distintos, disponemos de diferentes Disponemos de cuatro tipos de operadores de ‘igualdad’:
operadores.
Igualdad aritmética [=:=]. Comprueba la igualdad numérica de las
Desigualdad \== expresiones argumento.
Comprueba si dos términos son distintos. Por ejemplo, si dos variables tienen igual1(X, Y) :- X =:= Y.
distintos valores instanciados.
Identidad [==]. Comprueba si los términos argumento son idénticos.
Desigualdad aritmética =\= igual2(X, Y) :- X == Y.
Verifica la desigualdad numérica de dos expresiones.
Unificación [ = ]. Comprueba si los términos argumento son unificables
(equiparables). Es equivalente a la asignación directa entre variables en un
lenguaje procedimental. Da fallo si la unificación no es posible.
igual3(X, Y) :- X = Y.

Una definición equivalente sería:


igual4(X,X).

Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica
Ricardo Soto De Giorgis Informática Ricardo Soto De Giorgis Informática

2
PONTIFICIA PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática

Capítulo 4 – PROLOG Capítulo 4 – PROLOG


4.8 – Igualdad y asignación 4.8 – Igualdad y asignación
A continuación se muestra una tabla comparativa de todas las posibilidades
Asignación [is]. Evalúa la segunda expresión e intenta asignar el valor
existentes.
obtenido a la variable. No es conmutativo
incremento(X,Y) :- Y is X+1.

Una definición similar a la de igualdad sería:


igual5(X, Y) :- X is Y.

Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica
Ricardo Soto De Giorgis Informática Ricardo Soto De Giorgis Informática

PONTIFICIA PONTIFICIA
UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática UNIVERSIDAD CATOLICA DE VALPARAISO Escuela de Ingeniería Informática

Capítulo 4 – PROLOG Capítulo 4 – PROLOG


4.9 – Operadores lógicos y aritméticos 4.10 – Negación

Para comprobar si dos términos son distintos, disponemos de diferentes Existe un predicado de negación en Prolog (not) que está implementado
operadores. como negación por fallo, esto quiere decir que se evalúa como falso
cualquier cosa que Prolog sea incapaz de verificar que su predicado
argumento es cierto.

no_nulo(X):-not(X=:=0).
Operadores y funciones aritméticas válidas en Prolog son:
saldo_cuenta(maria,1000).
saldo_cuenta(flora,3000000).
saldo_cuenta(antonio,2000000).
millonario(X) :- saldo_cuenta(X, Y), Y > 1000000.
pobre(X) :- not(millonario(X)).

Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica Desarrollado por Escuela de Ingeniería INF 152 – Programación en Lógica
Ricardo Soto De Giorgis Informática Ricardo Soto De Giorgis Informática

Вам также может понравиться