Sie sind auf Seite 1von 52

LOGICA DE PREDICADOS

DE PRIMER ORDEN

ING. JOSE FERNANDEZ ZAMORA

Ningn software est garantizado


Todos los programas son software
Ningn programa est garantizado

INTRODUCCION

La evolucin de los ltimos aos en la informtica en


aplicar la lgica en la programacin ha derivado en la
programacin declarativa. La programacin declarativa se
fundamenta en la teora en la lgica de predicados. Esta
lgica se centra en conseguir sistemas que demuestren
automticamente teoremas.
La lgica de primer orden, tambin llamada lgica de
predicados o clculo de predicados, es un sistema formal
diseado para estudiar la inferencia en los lenguajes de
primer orden. Los lenguajes de primer orden son, a su vez,
lenguajes formales con cuantificadores que alcanzan slo a
variables de individuo, y con predicados y funcione cuyos
argumentos son slo constantes o variables de individuo.

OBJETIVOS
Al finalizar la sesin de clase el estudiante estar en
condiciones de:

Modelar el proceso de razonamiento.


Formalizar la nocin de demostracin.
Almacenar datos y describir posibles infinitas
relaciones entre objetos y luego obtener de forma
automtica conclusiones acerca de dichas relaciones.

LOGICA DE PRIMER ORDEN


La lgica proposicional asume que el mundo tiene
hechos.
La lgica de primer orden asume que el mundo
contiene:
- Objetos: personas, casas, etc.
- Relaciones: hermano de, mayor que, parte de,
entre,
- Funciones: suma, ..
Se trata de describir posibles infinitas relaciones entre
objetos y luego obtener de forma automtica conclusiones
acerca de dichas relaciones.
4

LOGICA DE PRIMER ORDEN


Para esquematizar dicha idea es interesante notar que cuando
se describen situaciones en el mundo real (relaciones entre
objetos) habitualmente se recurre a sentencias de tipo
declarativas como:
Todos los amos quieren a sus mascotas
Roberto es amo y Harry es su gato

Aplicando algunas reglas generales de razonamiento, tales


descripciones pueden usarse para obtener nuevas
conclusiones. Siguiendo el ejemplo, conociendo (a) y (b)
puede concluirse que:

Roberto quiere a Harry


Ahora bien, para que una computadora pueda tratar
sentencias como (a), (b) y (c), la sintaxis debe ser definida
precisamente y las reglas de razonamiento formalizadas.

LOGICA DE PRIMER ORDEN


El primero que formaliz la relacin entre el lenguaje y los
hechos fue Aristteles, mediante un esquema de anlisis que
denomin apofansis o logos apofanticos. Segn este
esquema, una proposicin puede expresarse en la forma:
S es P
Ejemplo: Scrates es humano
Donde S es el sujeto y P el predicado. Estas proposiciones se
suelen expresar en notacin polaca: P(S)
Ejemplo: humano(scrates).
En la cual el predicado humano se aplica sobre el sujeto
Scrates.
Roberto quiere a Harry, se recurre a predicados que se
aplican a ms de un sujeto: quiere_a(roberto,harry). una
relacin binaria. N sujetos con un predicado ser una relacin
N-aria.
6

LENGUAJE PROLOG
Conjunto de afirmaciones (hechos y reglas) representando los
conocimientos que poseemos en un determinado dominio o
campo de nuestra competencia.
Programar en prolog, consiste:
Declarar
algunos hechos acerca de objetos y sus
relaciones: Un hecho es una afirmacin sobre algo, por lo tanto

Juan ama a Isabel es un hecho compuesto por dos objetos Juan e


Isabel, y una relacin ama_a. Prolog: ama_a(juan,isabel).
presta(jose, dinero, pedro). Jos le presta dinero a Pedro
Definir algunas reglas acerca de objetos y sus relaciones.
Hacer consultas sobre objetos y sus relaciones

EJERCICIO
La familia de Luis no es muy numerosa, sus padres, Carlos y Susana,
tuvieron tres hijos: Roberto, Amalia, y Luis, de los cuales Luis es el menor.
Carlos, a su vez, tiene una hermana mayor llamada Isabel, siendo ambos
hijos de Ana y Guillermo. Los padres de Susana, Mercedes y Ernesto,
tuvieron otra hija bastante menor que ella, a quien bautizaron con el nombre
de Anglica, la que es tan bella como su nombre. Los dos hijos de Luis y su
esposa Laura, llamados Federico y Carla, estn estudiando letras.

Respuesta

Definir el juego de relaciones para


los de parentesco.
progenitor(carlos, roberto).
progenitor(carlos, luis).
progenitor(susana, amalia).
progenitor(ana, carlos).
progenitor(guillermo, carlos).
progenitor(mercedes, susana).
progenitor(ernesto, susana).
progenitor(luis, federico).
progenitor(laura, federico).

almacenar los datos sustanciales, o sea


progenitor(carlos, amalia).
progenitor(susana, roberto).
progenitor(susana, luis).
progenitor(ana, isabel)
progenitor(guillermo, isabel).
progenitor(mercedes, angelica).
progenitor(ernesto, angelica).
progenitor(luis, carla).
progenitor(laura, carla).

Consultas para obtener la siguiente informacin:


Es Carlos progenitor de Guillermo?
Es Jorge progenitor de Gonzalo?
Es Carlos progenitor de Amalia?
Usando el predicado padre responder: Es Carlos padre de
Roberto?

Respuesta
????-

progenitor(carlos, guillermo). Rpta: no


progenitor(jorge, gonzalo). Rpta: no
progenitor(carlos, amalia). Rpta: yes
padre(carlos, roberto). Rpta: no

EJERCICIO
Predicates
hombre(symbol)
mujer(symbol)
tiene(symbol,symbol)
moreno(symbol)
le_gusta_a(symbol,symbol)
padre(symbol,symbol)
madre(symbol,symbol)
regala(symbol,symbol,symbol)
Clauses
/* Predicados mondicos:
PROPIEDADES */
/* mujer(Per) <- Per es una mujer */
mujer(clara).
mujer(chelo).
/* hombre(Per) <- Per es un hombre */
hombre(jorge).
hombre(felix).
hombre(borja).
/* moreno(Per) <- Per tiene el pelo de
color oscuro */
moreno(jorge).

/* Predicados polidicos: RELACIONES */


/* tiene(Per,Obj) <- Per posee el objeto Obj */
tiene(jorge,moto).
tiene(jorge,auto).
tiene(jorge,bicicleta).
/* le_gusta_a(X,Y) <- a X le gusta Y */
le_gusta_a(clara,jorge).
le_gusta_a(jorge,clara).
le_gusta_a(jorge,informatica).
le_gusta_a(clara,informatica).
/* es_padre_de(Padre,Hijo-a) <- Padre es el padre
de Hijo-a */
padre(felix,borja).
padre(felix,clara).
/* es_madre_de(Madre,Hijo-a) <- Madre es la
madre de Hijo-a */
madre(chelo,borja).
madre(chelo, clara).
/* regala(Per1,Obj,Per2) <- Per1 regala Obj a
Per2 */
regala(jorge, flores, clara).
regala(jorge, chocolates, clara).
regala(luis, peluche, clara).
regala(ana, tarjeta, clara).
goal
mujer(chelo).
10
Yes.

TRMINOS
Los trminos pueden ser constantes o variables.
Las constantes se utilizan para dar nombre a objetos
concretos del dominio, dicho de otra manera, representan
individuos conocidos de nuestro Universo.

tomos:
Hay dos clases de
constantes:
Nmeros:

11

TIPOS DE CONSTANTES
tomos: existen tres clases de constantes atmicas:
- Cadenas de letras, dgitos y subrayado (_) empezando por
letra minscula.
- Cualquier cadena de caracteres encerrada entre comillas
simples (').
- Combinaciones especiales de signos: "?-", ":-", ...
Nmeros: se utilizan para representar nmeros de forma que
se puedan realizar operaciones aritmticas. Dependen del
ordenador y la implementacin.
- Enteros.
- Reales

12

EJEMPLOS

13

VARIABLES
El concepto de variable introduce formas ms refinadas de
consultar la base. Una variable es un comodn que ocupa el lugar
de un sujeto desconocido, en lgica de predicados esto se
denomina variable de sujeto.
Contando ahora con el concepto de variables, es posible realizar
consultas como De quin es progenitor Carlos?, en lugar de
realizar la tarea de preguntar Es Carlos progenitor de Roberto?,
Es Carlos progenitor de Amalia?, y as sucesivamente, para que l
respuesta sea cada vez yes o no. Con el objetivo de averiguar
de quin es progenitor Carlos, se puede realizar la siguiente
consulta:
?- progenitor(carlos, X).
Las variables, pueden tener dos estados, instanciadas y no
instanciadas. Debe representarse por letra mayscula.
Cuando no es de inters el valor de una determinada variable, se
utiliza una variable annima, la cual se denota con el signo de
subrayado _.
14

CONECTIVAS LGICAS: CONJUNCIONES


Hay casos en los cuales el nmero de hechos a verificar es
superior. Consideremos la consulta Juegan Guillermo y Gabriela
tenis?. En lugar de consultar de manera separada, existe una
forma ms sencilla de realizar este tipo de consultas. Esto se logra
mediante consultas conjuntivas; que consisten en dos o ms
hechos unidos por conjunciones lgicas. Ejemplo:

?- juega(guillermo, tenis), juega(gabriela, tenis).


?- progenitor(carlos, X), progenitor(susana, X)
Para que la consulta conjuntiva sea verdadera debe demostrarse
la veracidad de todos sus predicados.

15

CONECTIVAS LGICAS: DISYUNCIONES


Existen tambin las consultas disyuntivas, en las que basta que el
interprete logre alcanzar alguna de las metas para responder
positivamente a la consulta. El siguiente es un ejemplo de
consulta disyuntiva:
?- juega(gabriela, tenis); juega(gabriela, futbol).
Donde el punto y coma que separa cada una de las consultas
simples representa la disyuncin.
En lenguaje natural esta consulta equivale a Juega Gabriela
tenis o futbol?
Consultas ms complejas pueden formarse combinando consultas
conjuntivas y disyuntivas.
Juega Gabriela al tenis y al futbol, o juega Guillermo al tenis y al
futbol?.
Respuesta
?- (juega(gabriela, tenis), juega(gabriela, futbol));
(juega(guillermo, tenis), juega(guillermo, futbol)).
16

CONECTIVAS LOGICAS: NEGACION


No puede ser representada explcitamente en Prolog, sino que
se representa implcitamente por la falta de asercin : no,
tendr xito si el objetivo X fracasa.
La representamos con el predicado predefinido not o con \+:
Not (X) \+ X

17

REGLAS Y REGLAS CON OPCIONES


Dadas las proposiciones: Los peruanos son hombres. Todos los
hombres son mortales.
Se puede deducir que: Los peruanos son mortales.
No es necesario que se indique de forma explcita la proposicin
c, ya que puede deducirse de las dos anteriores. Esto es lo que
en lgica se denomina silogismo, que se define como un
argumento de tres proposiciones, la ltima de las cuales se
deduce de las otras dos. En Prolog, el hecho de que los
peruanos son hombres se indica como ya se vio:
hombre(peruano).

Con respecto al segundo dato: todos los hombres son


mortales es una proposicin que puede reescribirse en la forma
p q como: Si alguien es hombre entonces ese alguien es
mortal
o tambin, en la forma q p : Alguien es mortal si ese alguien
es hombre. El trmino alguien es un comodn.
18

La proposicin queda formada por dos proposiciones simples de la forma


P(S): mortal(X) y hombre(X)
Se usa el conectivo lgico (:-), cualquier proposicin de la forma q p
se indicar como q :- p. Ejemplo: mortal(X) :- hombre(X).
En lenguaje natural : X es mortal si X es hombre.
Regla es toda expresin de la forma q p que representa un hecho
condicional: si p es un predicado cierto, entonces q tambin es cierto.
Comnmente se denomina a q la cabeza de la regla y a p el cuerpo.
As, mortal(X) sera la cabeza, la cual describe el hecho que se intenta
definir, y hombre(X) la meta a satisfacer para que el hecho definido por
la cabeza sea cierto.
La base de datos para definir las proposiciones quedara:
hombre(peruano).
mortal(X) :- hombre(X).
Con estos datos ahora se puede consultar: ?- mortal(peruano).
Para ello realizar un apareo entre las expresiones:
mortal(X).
mortal(peruano).
X queda instanciada con el valor peruano. Por lo tanto la regla queda:
19
mortal(peruano) :- hombre(peruano).

ANTECEDENTES COMPUESTOS
En una expresin del tipo q p, la proposicin q puede ser compuesta.
Llamada de antecedente compuesto. Ejemplo:
padre_de(juan, pedro).
padre_de(pedro, luis).
Se define una nueva relacin abuelo_de:
abuelo_de(X, Y) :- padre_de(X, Z), padre_de(Z, Y).
Es decir: X es abuelo de Y, si existe un Z tal que X es el padre, y adems
Z es padre de Y:
X abuelo de Y X padre de Z Z padre de Y
En general un predicado estar definido por una mezcla de hechos y
reglas, llamadas clusula.

20

EJEMPLOS:
1.- Demostrar que Z es el rea de un tringulo de base X y altura Y
se usa la regla: area(X,Y,Z) :- A is X * Y, Z is A / 2.
Donde siempre debe verificarse el cumplimiento de las dos
relaciones (producto y divisin) para cualquier valor de X y de Y.
2.- Para hallar el valor absoluto de un numero, se requiere de una
regla para el caso en que el nmero sea cero o positivo, y otra
para el caso en que el nmero sea negativo, es decir:
absoluto(X,X) :- X > 0.
absoluto(X,Y) :- X =< 0, Y is X * -1.
(X,Y) :- (X > 0,Y=X); (X =<0,Y is X * -1).
En lenguaje natural: Y es el valor absoluto de un nmero X, si se
cumple que, o bien X es mayor que cero e Y es igual a X, o X es
menor igual que cero e Y es igual al producto de X por 1. La forma
lgica de esta proposicin es: t ((p q) (r s))
21

UNA OPCION DENTRO DE OTRA


Una segunda eleccin deba hacerse cuando la primera se cumple. Ejemplo una
regla que relacione tres nmeros distintos entre s con el menor de los tres :
?- menor(45,67,36,X). X = 36
Como de antemano no se sabe cul de los tres ser el menor, se debern tener en
cuenta todas las opciones posibles:
menor(A,B,C,A) :-A < B, A < C.
menor(A,B,C,B) :-B < A, B < C.
menor(A,B,C,C) :-C < A, C < B.
Para escribir estas tres reglas en una sola con OR, es necesario incluir una nueva
eleccin cuando el menor no es el primero:
menor(A,B,C,D) :-((A < B,A< C, D = A);((B < A, B < C, D = B);D = C)).
El menor de tres nmeros, o bien es el primero o, en caso de no serlo, o es el
segundo o es el tercero.
Obsrvese que el segundo OR se encuentra dentro de una de las opciones del
primero. Esta regla responde a una proposicin del tipo: s (p (q r)) donde a
su vez p y q son proposiciones compuestas.
Si bien este ejemplo se ha limitado a un OR dentro de otro, en teora puede haber
una cadena arbitrariamente larga de opciones unas dentro de otras, inclusive
ramificadas en forma de rbol: t ((p q) (r s))
22

EJERCICIO
Definir una relacin que vincule la seccin en que trabaja un
empleado, su sueldo bsico y su antigedad, con el sueldo que
cobra. Para ello tener en cuenta que a cada empleado se le paga
un sueldo bsico ms un adicional que se calcula de la siguiente
manera:
Los que trabajan en la seccin 1 cobran $120 ms, y sobre
el total un adicional por antigedad del 10% si tienen menos
de 5 aos, y del 20% si tienen 5 aos o ms.
Los que trabajan en la seccin 2 cobran $250 ms, pero no
cobran adicional por antigedad.

23

Se propone la construccin de una regla de la forma:


sueldo(Seccion, Basico, Antigedad, Cobrar)
Si se opta por definiciones separadas la solucin sera:
sueldo(1,Basico,Antigedad,Cobrar) :- Antigedad < 5, A is Basico + 120,B
is A * 0.10,Cobrar is A + B.
sueldo(1,Basico,Antigedad,Cobrar) :-Antigedad >= 5, A is Basico + 120,B
is A * 0.20,Cobrar is A + B.
sueldo(2,Basico,_,Cobrar) :-Cobrar is Basico + 250.

Usando OR anidados:
sueldo(Seccion,Basico,Antigedad,Cobrar)
:(((Seccion=1,
Antigedad<5,A is Basico+120,B is A*0.10,Cobrar is A+B);
(Seccion=1, Antigedad>=5,A is Basico+120, B is A*0.20,Cobrar is
A+B)); Cobrar is Basico + 250).
24

OPCIONES MUTIPLES
Para elegir mltiples opciones, lo ms elemental es definir tantas reglas
como opciones haya, por ejemplo, suponer que se desea una regla que
relacione el nmero 1 con la palabra lunes, el 2 con martes, etc. Se
construye mediante la escritura de varias definiciones de la regla:
dia(1,lunes).
dia(2,martes).
dia(3,miercoles).
dia(4,jueves).
dia(5,viernes).
dia(6,sabado).
dia(7,domingo).
una consulta posible a la base de datos donde se encuentran estas
relaciones: ?- dia(4,X).
X = jueves
Se podran reescribir estas reglas con OR, teniendo en cuenta que cualquier
opcin mltiple se puede representar por una cadena de decisiones
anidadas. El nmero es 1, o es 2, o es 3, etc., sin embargo, una regla as
definida sera complicada y de difcil lectura.
25

EJERCICIO
Escribir una relacin que vincule una temperatura con los carteles Muy
fro, Muy caluroso y OK, segn la temperatura sea menor que cero,
mayor o igual que 30, o entre 1 y 29 respectivamente.
?- test_temperatura(36,X).
X = Muy caluroso
Respuesta
Optando por reglas separadas:
test_temperatura(Temp,'Muyfrio') :- Temp =< 0.
test_temperatura(Temp,'Ok') :- Temp =< 29,Temp>= 1.
test_temperatura(Temp,'Muy caluroso') :- Temp>= 30.

26

ACERTIJOS
Tipo de problema en el cual se describe una situacin, pero a travs de
datos fragmentados y pistas indirectas. La solucin, es alcanzada a travs
de un proceso de deduccin y eliminacin.
El objetivo es lograr obtener todos los datos que describen la situacin.
Se pueden dividir los datos:
Datos concretos. Ejemplo: Mara jug con Juan.
Eliminaciones. Ejemplo: Luis no compr el auto.
Lmites superiores o inferiores. Ejemplo: Jos no fue el primero en
llegar.
Pistas ms sutiles. Ejemplo: La persona que bebi vino blanco dijo
que jams come verduras
Se representan los datos disponibles mediante hechos, reglas y la cadena
de deducciones necesaria para obtener la solucin.
En general, la base de conocimiento que permita la solucin de un acertijo
constar de:
Un conjunto de hechos que permitan definir a los sujetos que intervienen.
Un conjunto de reglas para describir las pistas, indicios y condiciones.
Una consulta que permita indagar a la base sobre todos o algunos de los
datos que completan la descripcin de la situacin.
27

EJERCICIO
Resolver el siguiente acertijo: Es Ud. el asesino?
El mayordomo fue encontrado muerto en su habitacin. Hay tres
sospechosos: Carlos, Mario y Ud. La investigacin puso de manifiesto
los siguientes datos :
a.- O bien Ud. es inocente, o bien Mario es culpable.
b.- Si Mario es culpable. Ud. es inocente.
c.- Carlos y Ud. nunca han actuado juntos, pero Carlos nunca
acta solo. Por consiguiente, si Mario es culpable, tambin lo
ser Carlos.
Quin o quienes son los culpables?

28

RESPUESTA
Primer paso, es necesario definir quienes son los sospechosos del
asesinato, es decir los sujetos que intervienen en el acertijo:
sospechoso(carlos).
sospechoso(mario).
sospechoso(ud).
Se declaran los datos contenidos en el enunciado de forma tal que el
intrprete pueda comprenderlos. Un dato concreto que surge de (b) es
Ud. es inocente si Mario es culpable,. inocente(ud) :- culpable(mario).
De (c) puede deducirse la regla Carlos es culpable si Mario es
culpable : culpable(carlos) :- culpable(mario).
Una pista ms sutil sealada en (a) es: Ud es inocente (no culpable) o
Mario es culpable. culpable(X) :-not(inocente(X)).
Alguien es culpable, si ese alguien no es inocente.
Para concluir, se define la regla asesino que determina el culpable del
crimen: asesino(X) :- sospechoso(X),pista, culpable(X).
29

BACKTRACKING
Supongamos que existe una base de datos con informacin acerca de
la familia de Juan, quien tuvo dos matrimonios:
hermanos

hermanos

Sergio

Eva

Emilio

Consultas:

Silvia

esposos

esposos

Juan

hermanos

Mara

Jos

Ana

Guillermo Cecilia Pedro

Miguel

-?- hombre(juan).
-?- hombre(X).
La consulta ms compleja; preguntar por los sobrinos polticos de Juan:
?esposo(juan,Mujer),hemano(Mujer,Hermano),progenitor(Hermano,Sobrino).
Es decir, alguien es el sobrino politico de Juan si es el hijo de un hemano/a
de su mujer.
Para resolver esta consulta Prolog busca una solucin para
esposo(juan,Mujer), luego para hermano(Mujer,Hermano) con la variable
Mujer instanciada, y luego para progenitor(Hermano,Sobrino) con la variable
Hermano instanciada .

Representacin de la informacin:
esposos(juan,maria).
esposos(juan,silvia).
hermanos(maria,jose).
hermanos(maria,ana).
hermanos(silvia,sergio).
progenitor(jose,guillermo).
progenitor(jose,cecilia).
progenitor(ana,pedro).
progenitor(ana,miguel).
progenitor(sergio,eva).
progenitor(sergio,emilio).
hombre(juan).
hombre(jose).
hombre(guillermo).
hombre(pedro).
hombre(miguel).
hombre(sergio).
hombre(emilio).
mujer(maria).
mujer(ana).
mujer(cecilia).
mujer(silvia).
mujer(eva).
30

esposo(juan,Mujer),hemano(Mujer,Hermano),progenitor(Hermano,Sobrino)

esposo(juan,maria)

hemano(maria,jose)

esposo(juan,silvia)

hemano(maria,ana)

hemano(silvia,sergio)

progenitor(jose,guillermo) progenitor(jose,cecilia) progenitor(ana,pedro) progenitor(ana,miguel) progenitor(sergio,eva)

progenitor(sergio,emilio)

A este proceso de retroceder en busca de nuevas soluciones se lo


denomina backtracking y forma parte de la estrategia de bsqueda
de soluciones implementada y se conoce como primero en
profundidad (depth-first).

31

PREDICADO CUT (CORTE!)


El predicado Cut es un predicado de paridad cero que se representa
mediante el signo de exclamacin !. Este predicado, corta el proceso de
backtracking de manera que Prolog no retroceda a buscar ms
soluciones para una meta determinada cuando las consultas son
compuestas.
Supongamos que deseamos consultar ahora por todos los sobrinos de
algn hermano de una de sus mujeres, la consulta se realizara de la
siguiente manera:
?esposo(juan,Mujer),hemano(Mujer,Hermano),!,progenitor(Hermano,Sobri
no).

32

Prolog encontrar una solucin para esposo(juan,Mujer) y


hemano(Mujer,Hermano) como en el caso anterior y agotar todas las
posibles soluciones alternativas de progenitor(Hermano,Sobrino) con
la variable Hermano ya instanciada. Pero est vez cuando intente
retroceder a buscar una nueva solucin de hemano(Mujer,Hermano)
se encontrar con el Cut indicndole que no puede buscar ms
alternativas a esta consulta.
La figura muestra el cambio con respecto al caso anterior:
esposo(juan,Mujer),hemano(Mujer,Hermano),!,progenitor(Hermano,Sobrino)

esposo(juan,maria)

hemano(maria,jose)

progenitor(jose,guillermo)

progenitor(jose,cecilia)

33

Al cambia la posicin del predicado Cut de la siguiente manera:

?- esposo(juan,Mujer),!,hemano(Mujer,Hermano),progenitor(Hermano,Sobrino).

La consulta sera por todos los sobrinos polticos de todos los hermanos de
una de las mujeres de Juan.
Se observar que se busca nuevamente soluciones para esposo(juan,Mujer)
y hemano(Mujer,Hermano), encuentra todas las alternativas de
progenitor(Hermano,Sobrino) para aquellas de hemano(Mujer,Hermano),
pero el Cut impide que regresar a buscar nuevas soluciones para
esposo(juan,Mujer) de manera que finalizar la consulta cuando no haya
ms soluciones para hemano(Mujer,Hermano). En la figura se observa la
diferencia con los casos anteriores:
esposo(juan,Mujer),!,hemano(Mujer,Hermano),progenitor(Hermano,Sobrino)

esposo(juan,maria)

hemano(maria,jose)

progenitor(jose,guillermo)

progenitor(jose,cecilia)

hemano(maria,ana)

progenitor(ana,pedro)

progenitor(ana,miguel)

34

Al ubicar un Cut al finalizar una consulta o regla permite obtener una


nica solucin a dicha consulta, la primera que encuentre el intrprete.
Este es el caso de la consulta:
?esposo(juan,Mujer),hemano(Mujer,Hermano),progenitor(Hermano,Sobrino),!.

Cuya resolucin se puede ver de en la siguiente figura:


esposo(juan,Mujer),!,hemano(Mujer,Hermano),progenitor(Hermano,Sobrino)

esposo(juan,maria)

hemano(maria,jose)

progenitor(jose,guillermo)

35

RECURSIVIDAD
Es aqulla en la que el objeto que se define forma parte de la
definicin.
Dentro del paradigma procedural, una forma de definir una tarea, es
mediante la divisin de la misma en subtareas que resulten ms
sencillas de resolver, garantizando el cumplimiento de las siguientes
condiciones:
Que las subtareas sean ms simples de resolver que la tarea que las
engloba. De otra forma no se avanzara en la resolucin.
Que en dicho avance, se alcance una tarea que pueda resolverse de
forma inmediata, sin necesidad de descomposicin.
Anlogamente, dentro del paradigma lgico, se pueden definir
reglas de tal manera que para su prueba, sea necesario probar la
veracidad de una regla mas sencilla, hasta llegar a una regla que su
prueba sea inmediata.
36

EJERCICIO

Prolog

37

RESPUESTA
- El factorial de 0 es uno.
- El factorial de un nmero es igual a s mismo multiplicado por el
factorial de su antecesor inmediato.
Esta es una tpica definicin recursiva constituida por dos reglas, el caso
embrionario y condicin de salida (1), y el caso general conteniendo la
parte recursiva (2).
En trminos lgicos, se puede decir que el factorial de un nmero se
calcula de acuerdo a
- El factorial del nmero 0 es igual a uno.
- El factorial de un nmero A es igual a otro nmero B, tal que si se
cumple que existe otro nmero C antecesor inmediato de A, y cuyo
factorial es igual a un cierto nmero D, entonces dicho B es igual al
producto de A por D.
En clusulas:
factorial(0, 1).
factorial(A, B):-C is A - 1,factorial(C, D),B is A * D.
38

ARBOLES

Es ms fcil entender la forma de una estructura


complicada si la escribimos como un rbol en el que el
nombre es un nodo y los componentes son las ramas.
Ejemplo: libro(titulo(prolog), autores(clocksin, mellish))

LISTAS
Las listas son unas estructuras de datos muy comunes en la
programacin no numrica. Una lista es una secuencia
ordenada de elementos que puede tener cualquier longitud.
Los elementos de una lista pueden ser cualquier trmino
(constantes, variables, estructuras) u otras listas
Las listas pueden representarse como un tipo especial de
rbol. Una lista puede definirse recursivamente como:

Se utiliza una notacin ms sencilla de las listas que dispone


a los elementos de la misma separados por comas, y toda la
lista encerrada entre corchetes.
Ejemplos:

Das könnte Ihnen auch gefallen