You are on page 1of 3

Tipo de dato

L
ogica y Programaci
on L
ogica Listas
La lista es una estructura que permite manejar
colecciones de datos.
Universidad Aut
onoma Metropolitana
Son ejemplos de listas:
DCCD, DTI
[una,coleccion,de,numeros], una lista de cuatro
cadenas alfab eticas;
[a,b], una lista de dos elementos;
1. Listas
[b,a], tambi en dos elementos, diferente a la anterior;
2. Unicaci
on
[3,3,4,0,-2], lista de cinco elementos num ericos;
3. Lectura y escritura de cl
ausulas
[0], una lista de un solo elemento;
[q,6,nn1w,[d,g,9]], lista de cuatro elementos cuyo
ultimo elemento es tambi
en una lista;
[], la lista vaca, la cual es muy importante en las
operaciones con listas;
[quo,Lista,Vacia], lista cuyo segundo y tercer

0
1

Prolog, 2014 (hjs)


Prolog, 2014 (hjs)
elemento son variables.

Tipo de dato Tipo de dato

Ejemplos de notaci
on de listas Ejercicios con listas
En las listas es muy utilizada la notaci on
A partir de las entradas existentes, proponer los
primeros-resto. Esto signica que toda lista no vaca
componentes o listas faltantes:
puede ser descompuesta en dos partes y, adem as, se
emplea una notaci on especial para representar esta primero resto construcci
on lista
[a, b|[]]
descomposici on. Leamos los siguientes ejemplos.
a, b, c [a, b, c]
lista primeros resto c/constructor: | A B
[a, b] a [b] [a|[b]] a, B C
[a, b, b, c] a, b [b, c] [a, b|[b, c]] p [d|E]
[ab, c, d] ab [c, d] [ab|[c, d]] [a|C] [a, b|B]
[b, a, c] b [a, c] [b|[a, c]] [a, [F |G], [[]]]
[[b], b, c] [b] [b, c] [[b]|[b, c]]
[[]] [] [] [[]|[]]
[] - - -
[a] a [] [a|[]]
2
3

Prolog, 2014 (hjs)


Prolog, 2014 (hjs)

Unicaci
on Unicaci
on

Unicaci
on Ejercicios de unicaci
on
La MI realiza inferencias partiendo del empatamiento
de dos literales: una tomada de la consulta y otra de t1 t2 Sustituci
on
la memoria. [a] [Uno|Dos]
El empatamiento se logra unicando las literales: V1 Gato
encuentra una sustituci on de variables por t erminos p(a,b) p(a,c)
tal que iguale las dos literales. E sta puede no existir. p(a,b) p(a,b)
p(a,b) p(a,C)
Algunos ejemplos de unicaci on:
t1 t2 Sustituci on qu([a,b], [C|D]) qu(D,R)
[a] [V] V/a A [a,b]
a [V] falla: no existe [ |D] [a,b]
[a] X X/[a]
[a, b] [Y] falla: no existe
[a, b] [Z|W] Z/a,W/[b]
[a,[b]] [Z|W] Z/a,W/[[b]]
[a, b] [Q, R] Q/a,R/b
4
5

Prolog, 2014 (hjs)


Prolog, 2014 (hjs)

[a, b] [a, b]
Unicaci
on
Ejemplo: unicaci
on y listas Resumen

Consideremos las siguientes cl


ausulas:
ord(X,Y,Z,[X|R]):-X=<Y,X=<Z,ord(Y,Z,R).
Elementos de la m
aquina Prolog (2)
ord(X,Y,Z,[Y|R]):-Y=<X,Y=<Z,ord(X,Z,R).
ord(X,Y,Z,[Z|R]):-Z=<X,Z=<Y,ord(X,Y,R). El contenido de la memoria, deniciones, es lo v alido
ord(X,Y,[X,Y]):-X=<Y.
ord(X,Y,[Y,X]). (aceptado): hechos, y reglas.
Y la meta ord(3,5,1,R): El motor de inferencias trabaja a partir de una
consulta:
Memoria Consulta Inferencia
(1) ord(X,Y,Z,[X|R]):- ? ord(3,5,1,R). ord(3,5,1,[3|R1 ]):- si
esta unica un hecho, entonces es v alida; y se
X=<Y,X=<Z, 3=<5,3=<1, elimina, pero se conservan las variables
ord(Y,Z,R). ord(5,1,R1 ). (1) falla
(2) ord(X,Y,Z,[Y|R]):- ? ord(3,5,1,R). ord(3,5,1,[5|R1 ]):- instanciadas.
Y=<X,Y=<Z, 5=<3,5=<1, si unica con el consecuente de una regla,
ord(X,Z,R). ord(3,1,R1 ). (2) falla
(3) ord(X,Y,Z,[Z|R]):- ? ord(3,5,1,R). ord(3,5,1,[1|R1 ]):- entonces la aplicaci
on de la sustituci
on (obtenida
Z=<Y,Z=<X, 1=<5,1=<3, de la unicaci
on a los antecedentes de la regla)
ord(X,Y,R). ord(3,5,R1 ). (3) R/[1|R1 ]
(4) ord(X,Y,[X,Y]):- ? ord(3,5,R1 ). ord(3,5,[3,5]):-
se convierte en una nueva consulta.

6
7

Prolog, 2014 (hjs)


Prolog, 2014 (hjs)
X=<Y. 3=<5. (4) R1 /[3,5]
(5) ord(X,Y,[Y,X]). ? R/[1|R1 ]/[1|[3,5]]/[1,3,5]

Conjunciones Conjunciones

Hechos relacionados Lectura y escritura de consultas

A continuaci on aparecen varios hechos base (sin variables) para las La lectura y escritura de las consultas se basa en el
literales persona/3 y padre/2 (con tres y dos argumentos). signicado que demos a las deniciones de la memoria.
persona(pablo,7,m). persona(juan,78,m). Lectura/escritura Consulta
persona(javier,55,m). persona(margara,32,f). quien es el padre de juan? ?padre(X,juan).
persona(ana,4,f). persona(antonio,58,m).
quien es el hijo de juan? ?padre(juan,X).
persona(alberto,24,m). persona(guadalupe,27,f).
persona(maria,75,f). persona(clara,45,f). es cierto que juan es padre de maria? ?padre(juan,maria).
padre(juan,javier). padre(javier,margara). cuales son las parejas que cumplen
padre(margara,ana). padre(juan,antonio). la relaci
on padre? ?padre(X,Y).
padre(antonio,alberto). padre(antonio,guadalupe).
padre(maria,javier). padre(clara,alberto). juan y maria tienen un hijo en ?padre(juan,X),
padre(guadalupe,pablo). com un? padre(maria,X).
cual es la edad de juan? ?persona(juan,X, ).
Como puede verse, hay mayor informaci
on: nombre, edad, y g
enero
son los argumentos de persona. cual es la edad del hijo de juan? ?padre(juan,X),
persona(X,Y,Z),
write(Y).
8
9

Prolog, 2014 (hjs)


Prolog, 2014 (hjs)

Conjunciones Deniciones

Lectura y escritura de consultas Deniciones directas

Lectura/escritura Consulta Teniendo claro el signicado de las deniciones que


existe una nina de 3 a
nos? ?persona(X,3,f). existen en la memoria podemos hacer nuevas
...? ?persona(juan,X, ). deniciones. Esta idea se basa en formular una consulta
quien es la madre de juan? general, p.e. qui
en es el hijo de X?
cual es la edad del padre de juan?
...? ?persona(X, ,m), hijo(X,Y):-padre(Y,X).
padre(X,juan),
padres(X,Y,Z):-padre(X,Z),padre(Y,Z).
padre(Y,X),
persona(Y, ,f), genero(X,Y):-persona(X,Y, ).
print(Y). ninno(X):-persona(X,Y,m),Y<12.
tiene alg
una sobrina juan? mismoGenero(X,Y):-persona(X, ,Gx),persona(Y, ,Gx).
mayor(X,Y):-persona(X,Ex, ),persona(Y,Ey, ),Ex>Ey.
Prolog, 2014 (hjs)
Prolog, 2014 (hjs)

10
11
Escritura Escritura

Planteamiento de una denici


on Construcci
on de una denici
on
Consid
erense los siguientes ejemplos del funcionamiento Consideraci
on Escritura Observaci
on
de una denici
on: Caso mas simple: primero([q],X) X es q
primero([a,b,c],X) X/a Generalizaci
on: primero([Y],X) X es Y
Simplicaci
on: primero([X],X)
primero([],X) falla
Caso representativo: primero([a,b,c],X) X es a
primero([[a,b],c,d],X) X/[a,a] Generalizaci
on: primero([Y|Z],X) (a es Y
primero([q],X) X/q [b,c] es Z)
primero([[]],X) X/[] X es Y
Simplicaci
on: primero([X|Z],X)
La escritura es un proceso de induccion: toma como
base el comportamiento particular de la denicion y ha Cl
ausulas nales:
de llegar a una expresion general que reproduzca todos primero([X],X).
los casos particulares. Veamos la construccion de la primero([X|Z],X).
denici
on de primero.

Prolog, 2014 (hjs)


Prolog, 2014 (hjs)

12
13

You might also like