Académique Documents
Professionnel Documents
Culture Documents
Antecedentes
Nociones de
Logica
Prolog
con
Relacion
Logica
Sintaxis
Listas
Eduardo Morales
Aritmetica
Algunos
Ejemplos
INAOE
Control
2012
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
1 / 192
Contenido
1 Introduccon
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
2 Antecedentes
3 Nociones de Logica
con Logica
4 Relacion
5 Sintaxis
Listas
6 Listas
Aritmetica
7 Aritmetica
Algunos
Ejemplos
8 Algunos Ejemplos
Control
9 Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
12 Operadores
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
2 / 192
Introduccon
Objetivo General
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
programacion
y aprender a programar en
Prolog.
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
3 / 192
Introduccon
Temario
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
a la programacion
logica
Introduccion
Listas
Aritmetica
Algunos
Ejemplos
Historia
Predicados, hechos, queries, variables, reglas
y resolucion,
relacion
con logica
Unificacion
Estrategia seguida por Prolog
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
4 / 192
Introduccon
Temario (cont.)
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
I/O
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
5 / 192
Introduccon
Temario (cont.)
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
6 / 192
Introduccon
Temario (cont.)
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
10
Aplicaciones:
1
2
Sintaxis
Listas
3
4
5
6
7
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Busqueda
(8puzzle)
criptoaritmetica)
Matematicas
simbolicas
(derivacion,
con de restricciones
Propagacion
Aprendizaje
Lenguaje natural
Logica
Programacion
Inductiva
Aprendizaje por refuerzo
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
7 / 192
Introduccon
Bibliografa
Introduccon
Antecedentes
Nociones de
Logica
AddisonWesley.
Intelligence, 4a edicion.
con
Relacion
Logica
Sintaxis
SpringerVerlag.
2a edicion.
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Cambridge, MA.
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
8 / 192
Introduccon
Introduccion
Introduccon
Antecedentes
Nociones de
Logica
Idea de programacion
simbolica:
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
concentran en el calculo
numerico
(no implica que no
lenguajes simbolicos
/ numericos,
solo que es mas
difcil)
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
9 / 192
Introduccon
Introduccion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
manipulaciones simbolicas
Lenguajes mas
usados en IA: Lisp y Prolog
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
10 / 192
Introduccon
Introduccion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
El concepto de logica
cientfico
Logica
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
11 / 192
Introduccon
Introduccion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Logica
provee los fundamentos para:
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
12 / 192
Introduccon
Introduccion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
cientfico.
Al igual que la logica
se ha desarrollado con
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
13 / 192
Introduccon
Introduccion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
para ser
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
14 / 192
Introduccon
Introduccion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
natural...
mas
... la logica
faciles
de dar por el hombre
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
15 / 192
Introduccon
Introduccion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
En su forma mas
pura sugiere que solo se le de
Sintaxis
axiomas logicos
y se ejecuta tratando de probar metas.
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
16 / 192
Antecedentes
Antecedentes
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
de
es una secuela del algoritmo de unificacion
(65)
Robinson y su principio de resolucion
Kowalski: formula la interpretacion
procedural de logica
en clasulas
de Horn (72).
Colmerauer y su grupo en MarseilleAix desarrollan un
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
17 / 192
Antecedentes
Antecedentes
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
formal.
Poca aceptacion
en EUA despues
de intentos
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
18 / 192
Antecedentes
Antecedentes
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
en Prolog.
Japon
anuncia su Proyecto de la Quinta Generacion
logica
con la programacion
como parte medular (81).
Notacion
estandar: la de Edimburgo.
Idea general (idealizada): en lugar de programar,
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
19 / 192
Nociones de Logica
Nociones de Logica
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Un programa logico
consiste en construir
programas concisos y elegantes que tengan el sentido
deseado.
En programacion
logica
Selectores y
Acceso a
Predicados y
Programas
Hechos
Reglas
Queries
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
20 / 192
Nociones de Logica
Nociones de Logica
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
{A1 , A2 , . . . , An , B1 , . . . , Bm }.
Listas
Aritmetica
equivalente:
Notacion
Algunos
Ejemplos
A1 , A2 , . . . , An B1 , B2 , . . . , Bm .
Control
Selectores y
Acceso a
Predicados y
Programas
A1 A2 . . . An B1 B2 . . . Bm
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
21 / 192
Nociones de Logica
Nociones de Logica
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Clausulas
H B1 , . . . , Bm
Sintaxis
Listas
A
A B, C, . . .
B, C, . . .
Aritmetica
Algunos
Ejemplos
(hecho)
(regla)
(querie)
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
22 / 192
Nociones de Logica
Hechos
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
quiere(juan, maria).
valioso(oro).
papa(juan,juanito).
papa(rival,ana).
papa(juanito,patricia).
mama(maria,juana).
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
suma(2,3,5).
clase(prolog,eduardo).
papa(juan,juana).
papa(juanito,pepe).
mama(maria,juanito).
mama(maria,ana).
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
23 / 192
Nociones de Logica
Queries
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
logico.
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
objetos.
Un hecho dice que P es verdadero.
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
24 / 192
Nociones de Logica
Queries
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
?- papa(juan,juana).
yes
?- suma(1,1,2).
no (si no esta definido)
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
25 / 192
Nociones de Logica
Consecuencias Logicas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
se obtienen aplicando
reglas de inferencia.
Sintaxis
Listas
preguntas a la vez.
Aritmetica
Algunos
Ejemplos
consecuencia logica
del programa.
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
26 / 192
Nociones de Logica
Variables
Introduccon
Antecedentes
Nociones de
Logica
?- papa(juan,ana).
?- papa(juanito,ana).
?- papa(maria,ana).
...
?- papa(rival,ana).
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
?- papa(X,ana).
X = rival
Control
Selectores y
Acceso a
Predicados y
Programas
la relacion.
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
27 / 192
Nociones de Logica
Variables
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
2012
28 / 192
Nociones de Logica
Variables
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
29 / 192
Nociones de Logica
Variables
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
mult(0,X,0).
?- mult(0,4,0).
yes
suma(0,X,X).
?- suma(0,2,2).
yes
?- suma(0,3,Y).
Y = 3.
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
30 / 192
Nociones de Logica
Varias queries
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Tambien
podemos hacer varias preguntas a la vez:
?- papa(juan,juanito), papa(juanito,pepe).
yes
?- papa(juan,X), papa(X,pepe).
i.e., existe una persona que sea hijo de juan y papa de
pepe?
X = juanito
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
31 / 192
Nociones de Logica
Varias queries
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
?- papa(juan,X), papa(X,Y).
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
32 / 192
Nociones de Logica
Reglas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
A B1 , B2 , . . . , Bn
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
sencillas.
queries en terminos de mas
Declarativa: definen nuevas/complejas relaciones
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
33 / 192
Nociones de Logica
Reglas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
contestar
?- papa(juan,X), hombre(X).
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
el padre de Y y Y es hombre.
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
34 / 192
con Logica
Relacion
con Logica
Relacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
dice lo que
Sintaxis
Listas
P (o su modelo
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
35 / 192
con Logica
Relacion
con Logica
Relacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
PQ
P
Q
PQ
Q
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
36 / 192
con Logica
Relacion
con Logica
Relacion
Introduccon
Antecedentes
Nociones de
Logica
La mas
estudiada es resolucion:
por ser refutation
Aritmetica
logicos
es el algoritmo de unificacion.
Algunos
Ejemplos
Ejemplo de resolucion:
con
Relacion
Logica
Sintaxis
Listas
PQ
P
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
37 / 192
con Logica
Relacion
con Logica
Relacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
que
es una substitucion
especfico (el
que si existe otro unificador este
es mas
mgu es unico).
de C y D sin
construir una nueva clausula
con la union
L1 y L2 :
((C {L1 }) (D {L2 }))
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
38 / 192
con Logica
Relacion
con Logica
Relacion
Introduccon
Antecedentes
Nociones de
Logica
medio de unificacion.
hijo(X,Y) :- papa(Y,X).
papa(juan,juanito).
= [Y/juan, X/juanito]
hijo(juanito,juan).
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
alumno(X,progIA) :- estudia(X,prolog).
es de univ(A,Univ) :- alumno(A,Materia),
imparte(Univ,Materia).
= [B/X/A, progIA/Materia]
es de univ(B,Univ) :- estudia(B,prolog),
imparte(Univ,progIA).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
39 / 192
con Logica
Relacion
con Logica
Relacion
Introduccon
Antecedentes
Nociones de
Logica
(i.e.,
(i.e., anadimos
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
40 / 192
con Logica
Relacion
Introduccon
logicos.
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Output: G, si esta
es una instancia de G deducible de P
o fracaso
Inicializa: resolvente = G
while resolvente 6= {} do
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
41 / 192
con Logica
Relacion
Ejemplo
Introduccon
Antecedentes
Teoria:
Querie:
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
papa(juan,juanito). (b)
?- abuelo(X,Y).
papa(juan,juana).
?- papa(X,Z), papa(Z,Y).
papa(juanito,pepe).
papa(juanito,patricia). (a)
abuelo(A,B):- papa(A,C), papa(C,B).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
Tomando esta
con (b):
[X = juan, Y = patricia]
G = abuelo(X,Y)1 2 = abuelo(juan,patricia).
(INAOE)
2012
42 / 192
con Logica
Relacion
con logica
Relacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
facil
es hacer deducciones en un orden
hacer). Lo mas
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
ineficiente.
control, sin embargo es mas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
43 / 192
con Logica
Relacion
con logica
Relacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Estrategia de Prolog:
Escoge la meta mas
a la izquierda
Busca secuencial con backtracking
Si hacemos el mismo ejemplo pero siguiendo la
estrategia de Prolog:
?- papa(X,Y), papa(Z,Y)
la primera con (b):
?- papa(juanito,Y) [X = juan]
con la tercera:
[Y = pepe]
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
44 / 192
con Logica
Relacion
Ejemplo
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
backtracking:
gusta(maria,comida).
gusta(maria,vino).
gusta(juan,vino).
?- gusta(maria,X), gusta(juan,X).
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
search).
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
45 / 192
con Logica
Relacion
Ejemplo
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
determina el arbol
de busqueda.
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
46 / 192
con Logica
Relacion
Ejemplo
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
47 / 192
con Logica
Relacion
Disjuncion
Introduccon
Antecedentes
Nociones de
Logica
P :- Q ; R.
P :- Q.
P :- R.
P :- Q, R ; S, T, U.
P :- (Q,R) ; (S,T,U).
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
gusta(maria, comida).
gusta(maria,vino).
gusta(juan, vino).
gusta(juan, maria).
?- gusta(maria,X), gusta(juan,X).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
48 / 192
Sintaxis
Sintaxis
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
terminos
Algunos
Ejemplos
terminos
simples
variables
estructuras (terminos
compuestos)
constantes
numeros
atomos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
49 / 192
Sintaxis
Sintaxis
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
e.g., de numeros:
1, 2, 0 (en algunos casos hay
a, B, c d, ...
e.g., de variables: A, a, +
e.g., de estructuras: libro(autor,ttulo,ano).
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
50 / 192
Sintaxis
Sintaxis
Introduccon
Antecedentes
argumentos: functor/arity.
curso(prolog,lunes,11,14,eduardo,morales,ccc,8301).
vs
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
curso(prolog,horario(lunes,11,14),
profesor(eduardo,morales),lugar(ccc,8301)).
Aritmetica
Algunos
Ejemplos
maestro(Mat,Maestro):curso(Mat,Horario,Maestro,Lugar).
duracion(Mat,Tiempo):curso(Mat,horario(Dia,TiempoI,TiempoF),Prof,Lugar),
suma(TiempoI,Tiempo,TiempoF).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
51 / 192
Sintaxis
Sintaxis
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
vs
dia(prolog,lunes).
tiempoI(prolog,11).
tiempoF(prolog,14).
profesor nombre(prolog,eduardo).
...
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
52 / 192
Sintaxis
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
If S y T son Constantes y S = T
If S = Variable, aparea e instanca S a T
If S y T son estructuras, S y T aparean si
S y T tienen el mismo nombre y sus argumentos
aparean
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
53 / 192
Sintaxis
Ejemplo
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
E.g., de geometra:
P1 = punto(1,1).
P2 = punto(2,3).
L = linea(P1,P2) = linea(punto(1,1),punto(2,3)).
T = triangulo(P3,P4,P5) =
triangulo(punto(4,2),punto(6,4),punto(7,1)).
vertical(linea(punto(X,Y),punto(X,Z))).
horizontal(linea(punto(X,Y),punto(Z,Y))).
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
54 / 192
Sintaxis
Ejemplo
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Podemos decir:
?- vertical(linea(punto(1,8),punto(1,2))).
yes
?- vertical(linea(punto(2,3),X)).
X = punto(2, )
?- vertical(S), horizontal(S).
S = linea(punto(X,Y),punto(X,Y))
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
55 / 192
Sintaxis
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
56 / 192
Sintaxis
Reglas Recursivas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
padre(juanito, pepe).
padre(pepe, luis).
padre(luis, carlosI).
ancestro(X,Y) :- padre(X,Y).
ancestro(X,Z) :- padre(X,Y), ancestro(Y,Z).
?- ancestro(juanito, carlosI).
Probar con diferentes ordenes de las reglas y del cuerpo de
la segunda regla.
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
57 / 192
Sintaxis
Reglas Recursivas
Introduccon
Antecedentes
Nociones de
Logica
1
2 :- A,B
2 :- A,B
1
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
1
2 :- B,A
Control
Selectores y
Acceso a
Predicados y
Programas
2 :- B,A
1
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
58 / 192
Sintaxis
Reglas Recursivas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
59 / 192
Sintaxis
Reglas Recursivas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
El orden optimo
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
60 / 192
Sintaxis
Otros parecidos
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
liga(a,b).
liga(a,c).
liga(c,d).
liga(b,d).
liga(d,e).
liga(c,f).
conecta(Nodo1,Nodo2) :- liga(Nodo1,Nodo2).
conecta(Nodo1,Nodo2) :- liga(Nodo1,Nodo3),
conecta(Nodo3,Nodo2).
sucesor(1,2).
sucesor(2,3).
sucesor(3,4).
...
menor(Num1,Num2) :- sucesor(Num1,Num2).
menor(Num1,Num2) :- sucesor(Num1,Num3),
menor(Num3,Num2).
(INAOE)
2012
61 / 192
Sintaxis
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Acciones (movs.):
tomar el platano
subir a la caja
empujar la caja
caminar
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
62 / 192
Sintaxis
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Descriccion:
Sintaxis
edo(PosHorizMono,PosVertMono,PosCaja,TienePlatano).
Listas
Aritmetica
Algunos
Ejemplos
Control
TienePlatano:
si, no
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
63 / 192
Sintaxis
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
mov(edo(centro,sobre caja,centro,no),toma,
edo(centro,sobre caja,centro,si)).
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
subir:
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
empuja:
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
64 / 192
Sintaxis
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
?- come(edo(puerta,piso,ventana,no)).
Sintaxis
come(edo( , , ,si)).
come(Edo1) :mov(Edo1, Acc, Edo2),
come(Edo2).
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
65 / 192
Sintaxis
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
66 / 192
Sintaxis
Aritmetica
en Logica
Introduccon
Antecedentes
aritmetica,
estos pierden su sentido logico,
sin embargo,
podemos mantenerlo con los axiomas de Peano.
0, s(0), s(s(0)), ...
numero(0).
numero(s(X)) :- numero(X).
menor igual(0,X) :- numero(X).
menor igual(s(X),s(Y)) :- menor igual(X,Y).
minimo(N1,N2,N1) :- menor igual(N1,N2).
minimo(N1,N2,N2) :- menor igual(N2,N1).
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
suma(0,X,X) :- numero(X).
suma(s(X),Y,s(Z)) :- suma(X,Y,Z).
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(0 + X = X)
(s(X) + Y = s(X + Y))
(INAOE)
2012
67 / 192
Sintaxis
Aritmetica
en Logica
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
mult(0,X,0).
mult(s(X),Y,Z) :- mult(X,Y,W), suma(W,Y,Z).
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
68 / 192
Listas
Listas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
[a,b,c] = .(a,.(b,.(c,[])))
lista vacia = []
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
69 / 192
Listas
Listas
Introduccon
Antecedentes
es lista([]).
es lista([H|T]) :- es lista(T).
Nociones de
Logica
con
Relacion
Logica
anade(El,Lista,[El|Lista]).
Sintaxis
Listas
elemento(X,[X|T]).
elemento(X,[ |T]):elemento(X,T). (usos)
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
quita(El,[El|L],L).
quita(El,[H|T],[H|R]):quita(El,T,R).
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
70 / 192
Listas
Listas
Introduccon
Tambien
para anadir
quita(a,L,[b,c,d])
Antecedentes
Nociones de
Logica
elemento(El,L) :- quita(El,L, ).
con
Relacion
Logica
anade(El,Lista1,Lista2) :- quita(El,Lista2,Lista1).
Sintaxis
Listas
prefijo([],L).
prefijo([X|T],[X|R]):- prefijo(T,R). (usos)
Aritmetica
Algunos
Ejemplos
Control
sufijo(L,L).
sufijo(L,[H|T]):- sufijo(L,T). (usos)
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
sublista(L1,L2):prefijo(L3,L2),
sufijo(L1,L3).
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
71 / 192
Listas
Listas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
sublista(L1,L2):- prefijo(L1,L2).
sublista(L1,[H|T]):- sublista(L1,L2).
append([],L,L).
append([H|L1],L2,[H|L3]):append(L1,L2,L3). (usos)
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
2012
72 / 192
Listas
Listas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
sublista(L1,L2):append(X,Y,L2),
append(Z,L1,X).
member(X,L) :- append(Y,[X|Z],L).
Sintaxis
Listas
member(X,L) :- sublista([X,L).
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
last(X,[X]).
last(X,[ |T]):- last(X,T).
last(X,L) :- append(Y,[X],L).
long([],0).
long([H|T],s(N)):- long(T,N).
Estructuras
Parciales
Definite
(INAOE)
2012
73 / 192
Listas
Listas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
podemos anadir
un argumento extra:
Sintaxis
come(edo( , , ,si),[]).
come(Edo1,[Acc|Resto]) :mov(Edo1, Acc, Edo2),
come(Edo2,Resto).
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
74 / 192
Listas
Permutacion
Introduccon
Antecedentes
Nociones de
Logica
permuta([],[]).
permuta([El|L],Perm):permuta(L,LP),
anade(El,LP,Perm).
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
75 / 192
Listas
Permutacuon
Introduccon
Antecedentes
Nociones de
Logica
Si preguntamos: permuta(L,[a,b,c]).
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
voltea([],[]).
voltea([H|T],Vol):voltea(T,TVol),
append(TVol,[H],Vol).
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
76 / 192
Listas
Listas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
voltea(L,LV) :- voltea(L,[],LV).
Aritmetica
Algunos
Ejemplos
voltea([],L,L).
voltea([H|T],Acum,Vol):voltea(T,[H|Acum],LVol).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
77 / 192
Listas
Palindrome
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
palin([]).
palin([ ]).
palin([H|T]):append(EnMedio,[H],T),
palin(EnMedio).
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Alternativamente:
palin(L) :- voltea(L,L).
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
78 / 192
Listas
Aplana
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Aplana:
aplana([],[]).
aplana([H|T],Res) :aplana(H,HP),
aplana(T,TP),
append(HP,TP,Res).
aplana(X,[X]).
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
79 / 192
Listas
Aplana
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
aplana(List,ListPl) :- aplana(List,[],ListPl).
Sintaxis
Listas
aplana([],L,L).
aplana([H|T],L1,L3) :aplana(H,L1,L2),
aplana(T,L2,L3).
aplana(X,S,[X|S]).
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
80 / 192
Aritmetica
Aritmetica
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
is
Valor is Expresion
=> evalua
y unifica el
expresion
resultado a valor
?- X is 3 + 5.
X =8
?- 8 is 3 + 5.
yes
?- 3 + 5 is 3 + 5.
no
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
81 / 192
Aritmetica
Aritmetica
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Expresion
debe de evaluar a algo (si no falla) X is 5 + Y
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
82 / 192
Aritmetica
Aritmetica
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
factorial(N,F) :N > 0,
N1 is N - 1,
fact(N1,F1),
F is N * F1.
factorial(0,1).
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
83 / 192
Aritmetica
Aritmetica
Introduccon
Antecedentes
uno (o dos)
Sintaxis
Listas
fact(N,F) :- fact(0,N,1,F).
Nociones de
Logica
con
Relacion
Logica
Aritmetica
Algunos
Ejemplos
fact(I,N,T,F) :I < N,
I1 is I + 1,
T1 is T * I1,
fact(I1,N,T1,F).
fact(N,N,F,F).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
84 / 192
Aritmetica
Aritmetica
Introduccon
Antecedentes
Nociones de
Logica
Alternativamente:
fact(N,F) :- fact(N,1,F).
con
Relacion
Logica
Sintaxis
fact(N,T,F) :N > 0,
T1 is T * N,
N1 is N - 1,
fact(N1,T1,F).
fact(0,F,F).
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
85 / 192
Aritmetica
Aritmetica
Introduccon
Antecedentes
Nociones de
Logica
sumalista([],0).
sumalista([H|T],Res) :sumalista(T,Res1),
Res is Res1 + H.
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
sumalista(L,R) :- sumalista(L,0,R).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
86 / 192
Aritmetica
Aritmetica
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
marca error)
Listas
Aritmetica
long([H|T],N) :N > 0,
N1 is N - 1,
long(T,N1).
long([],0).
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
87 / 192
Aritmetica
Ejemplo
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
se cicla)
reves
Sintaxis
long([],0).
long([ |T],N) :long(T,N1),
N is 1 + N1.
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
88 / 192
Aritmetica
Ejemplo (cont).
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
long([H|T],1 + N) :long(T,N1),
?- long([a,b,c],N), Long is N.
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
89 / 192
Aritmetica
Ejemplo
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
sencillo y se puede
es mas
Sintaxis
Listas
long([H|T],s(N)) :long(T,N).
long([],0).
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
90 / 192
Algunos Ejemplos
Ordena Listas
Introduccon
Antecedentes
Nociones de
Logica
Ordena Listas
Una idea poco eficiente es hacer permutaciones y
con
Relacion
Logica
sort(L,LO) :permuta(L,LO),
orden(LO).
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
orden([A,B|T]) :A < B,
orden([B|T]).
orden([ ]).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
91 / 192
Algunos Ejemplos
Ordena Listas
Introduccon
Antecedentes
Una solucion
un poco mejor es insertar el elemento en
Nociones de
Logica
sort([H|T],LO) :sort(T,TO),
inserta(H,TO,LO).
sort([],[]).
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
inserta(H,[],[H]).
inserta(H,[F|T],[F|R]) :H > F,
inserta(H,T,R).
inserta(H,[F|R],[H,F|R]) :H =< F.
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
92 / 192
Algunos Ejemplos
Ordena Listas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
2012
93 / 192
Algunos Ejemplos
Ordena Listas
Introduccon
Antecedentes
Nociones de
Logica
acumulador
con
Relacion
Logica
qsort(L,LO) :- qsort(L,[],LO).
Sintaxis
Listas
qsort([H|T],Acum,LO) :divide(H,T,Men,May),
qsort(May,Acum,MayO),
qsort(Men,[H|MayO],LO).
qsort([],L,L).
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
94 / 192
Algunos Ejemplos
NDFA
Mini-aplicacion:
Introduccon
Antecedentes
Nociones de
Logica
Representacion:
trans(Edo1, Simbolo, Edo2).,
trans vacio(Edo1,Edo2).,
final(Edo).
con
Relacion
Logica
acepta(Edo,[]) :final(Edo).
acepta(Edo,[H|T]) :trans(Edo,H,NEdo),
acepta(NEdo,T).
acepta(Edo,String) :trans vacio(Edo,NEdo),
acepta(NEdo,String).
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
95 / 192
Algunos Ejemplos
NDFA
Mini-aplicacion:
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
trans(s1,0,s1). trans(s1,1,s2).
trans(s1,0,s4). trans(s2,0,s2).
trans(s2,0,s3). trans(s3,1,s5).
trans vacio(s4,s2). final(s5).
?- acepta(s1,[0,1,0,1]).
yes
?- acepta(X,[0,0,1]).
X = s1; X = s2; X = s4
?- acepta(s1,[X,Y,Z]).
X = 1, Y = 0, Z = 1;
X = 0, Y = 0, Z = 1
?- Sol = [ , , ], acepta(s1, Sol).
Sol = [1,0,1]; Sol = [0,0,1]
(INAOE)
2012
96 / 192
Algunos Ejemplos
NDFA
Mini-aplicacion:
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
solucion):
e.g., trans vacio(s2,s4). y ?- acepta(s1,[1]).
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
97 / 192
Control
Control
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
no
unificacion
El programador puede afectar la ejecucion
de un
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
98 / 192
Control
Control
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
99 / 192
Control
Control
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
programas!!,
Para ver su uso mas
facil,
funcion
Sintaxis
Listas
f(X,0) :- X < 3.
f(X,2) :- X >= 3, X < 6.
f(X,4) :- X >= 6.
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
100 / 192
Control
Control
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
f(X,0) :- X < 3, !.
f(X,2) :- X >= 3, X < 6, !.
f(X,4) :- X >= 6.
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
101 / 192
Control
Control
Introduccon
Antecedentes
Nociones de
Logica
Idea: si la
primera clausula
falla ya sabemos que X >= 3 (lo
de la tercera clausula)
con
Relacion
Logica
Sintaxis
f(X,0) :- X < 3, !.
f(X,2) :- X < 6, !.
f(X,4).
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
sentido logico
(si le quitamos los cuts nos da varias
soluciones)
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
102 / 192
Control
Control
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
clausula
que tiene el !
Sintaxis
Listas
se cumple,
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
H : B1 , B2 , . . . , Bn , !, Bn+1 , . . . , Bz .
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
103 / 192
Control
Control
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
AND/OR)
P :- Q, R.
P :- S, !, T.
P :- U, V.
A :- B, P, C.
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
104 / 192
Control
Control
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Usos:
decirle que ya encontro una solucion
correcta
decirle que si llegaste ah, entonces falla (en conjuncion
con fail)
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
105 / 192
Control
Control
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Que hace ! ?
poda todas las clausulas
debajo de esta
poda todas las posibles soluciones al lado izquierdo del
cut
no afecta el lado derecho
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
106 / 192
Control
Control
Introduccon
Antecedentes
Nociones de
Logica
e.g.,
max(X,Y,X) :- X >= Y, !.
max(X,Y,Y) :- X < Y.
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
de la 2a
De hecho Bratko en su libro quita la condicion
clausula,
sin embargo esto solo funciona si preguntas
por el Max, pero falla si preguntas: ?- max(4,2,2).
Posible solucion:
Selectores y
Acceso a
Predicados y
Programas
max(X,Y,Z) :- X >= Y, !, Z = X.
max(X,Y,Y).
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
107 / 192
Control
Ejemplo
Introduccon
Antecedentes
Nociones de
Logica
member ck(H,[H| ]) :- !.
member ck(H,[ |T]) :member ck(H,T).
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Anade
anade(E,L,L) :- member(E,L), !.
anade(E,L,[E|L]).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
108 / 192
Control
por falla
Negacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
109 / 192
Control
por falla
Negacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
E.g.,
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
110 / 192
Control
por falla
Negacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
111 / 192
Control
por falla
Negacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
diferente(X,X) :- !, fail.
diferente(X,Y).
Sintaxis
Listas
Aritmetica
diferente(X,Y) :( X = Y, !, fail
; true ).
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
112 / 192
Control
por falla
Negacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
not(P) :- P, !, fail.
not(P).
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
113 / 192
Control
por falla
Negacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
114 / 192
Control
por falla
Negacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
?- est soltero(X)
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
115 / 192
Control
por falla
Negacion
Introduccon
Antecedentes
Nociones de
Logica
?- \+ X = 1, X = 2
con
Relacion
Logica
Sintaxis
r(a).
q(b).
p(X) :- \+ r(X).
?- q(X), p(X).
X = b.
?- p(X), q(X).
no
p(s(X)) :- p(X).
q(a).
?- \+ (p(X), q(X)).
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
116 / 192
Control
por falla
Negacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
117 / 192
Control
CUTs
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
118 / 192
Control
CUTs
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
p :- a,b. = (a b) c
p :- c.
Sintaxis
Listas
p :- a,!,b. = (a b) (a c)
p :- c.
Aritmetica
Algunos
Ejemplos
p :- c. = c (a b)
p :- a,!,b.
de MAX)
e.g., (de nuevo recordar la definicion
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
119 / 192
Control
CUTs
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
ifthenelse(P,Q,R) :- P, !, Q.
ifthenelse(P,Q,R) :- R.
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
120 / 192
Control
If-Then-Else
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
como: P > Q ; R
Notas (sobre los CUTs):
Listas
Si la solucion
esta determinada NO hace falta
Un CUT se debe de poner en el punto exacto en donde
Aritmetica
Algunos
Ejemplos
antes del
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
121 / 192
Control
CUTs
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
primera(Meta) :- call(Meta), !.
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
122 / 192
Control
Ejemplo
Introduccon
Antecedentes
aplana(L,LA) :- aplana(L,[],LA).
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
aplana([],L,L) :- !.
aplana([H|T],L1,L) :!,
aplana(H,L1,L2),
aplana(T,L2,L).
aplana(X,L,[X|L]).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
CUTs, en la ultima:
X = [], X = [ | ].
(INAOE)
2012
123 / 192
Control
Ejemplo
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
?- aplana([],X).
X = []
?- X = [ ], aplana([],X).
X = [[]]
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
124 / 192
Selectores
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
atom(X).
integer(X).
atomic(X) :- atom(X) ; integer(X).
var(X).
nonvar(X).
?- var(X), X = 2.
X=2
?- X = 2, var(X).
no
?- atom(2).
no
?- atomic(2).
yes
(INAOE)
2012
125 / 192
Igualdades
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
X=Y
X is Expr1
Exp1 =:= Exp2
Exp1 =\= Exp2
T1 == T2
T1 \== T2
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
126 / 192
Acceso a Predicados
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
functor(Predicado,Nombre,Aridad).
Usos:
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
construir un predicado
?- functor(papa(juan,juanito),F,N).
F = juan, N = 2
?- functor(Pred,foo,3).
Pred = foo( , , ).
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
127 / 192
Acceso a Predicados
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
arg(N,Pred,Valor).
Usos:
1
seleccionar un argumento
instanciar un argumento
?- arg(2,arbol(6,4,8),X).
X=4
?- arg(2,arbol(3,X,7),1).
X=1
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
128 / 192
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
subst(Old,New,Old,New).
subst(Old,New,Otro,Otro) :atomic(Otro),
Otr0 \ = Old.
subst(Old,New,Pred,NPred) :functor(Pred,F,N),
functor(NPred,F,N),
subst aux(N,Old,New,Pred,NPred).
subst aux(N,Old,New,Pred,NPred) :N > 0,
arg(N,Pred,ArgN),
subst(Old,New,ArgN,NArgN),
arg(N,NPred,NArgN),
N1 is N - 1,
subst aux(N1,Old,New,Pred,NPred).
(INAOE)
subst aux(0, , , , ).
2012
129 / 192
Ejemplo
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
130 / 192
UNIV
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
131 / 192
Crear Predicados
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
predicados.
Podemos definir univ en terminos
de functor y arg.
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
132 / 192
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
133 / 192
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
args([Arg1|Args],Pred,N) :arg(N,Pred,Arg),
N1 is N + 1,
args(Args,Pred,N1).
args([], , ).
long([],0).
long([H|T],N) :long(T,N1),
N is N1 + 1.
(INAOE)
2012
134 / 192
Maplist
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
maplista( ,[],[]).
maplista(F,[L1|T1],[Res1|ResT]) :junta(L1,[Res1],Args),
Meta =.. [F|Args],
call(Meta),
maplista(F,T1,ResT).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
e.g.,
?- maplista(junta,[[[a,b],[c,d]],[[1,2],[3,4]]],X).
X = [[a,b,c,d],[1,2,3,4]]
?- maplista(quita,[[a,[b,c,a,d]],[1,[2,1,3,4]]],X).
X = [[b,c,d],[2,3,4]]
(INAOE)
2012
135 / 192
Copia
Introduccon
Antecedentes
Nociones de
Logica
copy(Pred,CPred) :copy(Pred,CPred,[], ).
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
copy(Var1,Var2,Subst,Subst) :var(Var1),
v member(Var1/Var2,Subst),
!.
copy(Var1,Var2,Subst,[Var1/Var2|Subst]) :var(Var1), !.
copy(Pred,CPred,Subst1,Subst2) :functor(Pred,F,N),
functor(CPred,F,N),
copy args(N,Pred,CPred,Subst1,Subst2).
Estructuras
Parciales
Definite
(INAOE)
2012
136 / 192
Copia (cont.)
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
137 / 192
de programa
Acceso y manipulacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
clause(Head,Body):
Head debe de tener el nombre de una clausula
y nos
?- clause(append(X,Y,Z),L).
X = [], Y= 348, Z= 348, L=true;
X=[ 780| 773], Y= 348, Z=[ 780| 775], L=junta( 773, 348, 775)
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
138 / 192
de programa
Acceso y manipulacion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
tambien
o quitar clasulas
con: assert(X) y
retract(X). e.g.,
?- entiendo.
no
?- assert(entiendo).
yes
?- entiendo.
yes
?- retract(entiendo).
yes
?- entiendo.
no
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
139 / 192
ejemplos
Mas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
a :- b, c.
d :- b, not c.
e :- c, f.
b.
c.
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
?- a.
yes
?- assert(f).
yes
?- e.
yes
?- retract(c).
yes
Estructuras
Parciales
Definite
(INAOE)
2012
140 / 192
ejemplos
Mas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
2012
141 / 192
Torres de Hanoi
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
hanoi(s(0),A,B,C,[A a B]).
hanoi(s(N),A,B,C,Movs) :hanoi(N,A,C,B,Movs1),
hanoi(N,C,B,A,Movs2),
append(Movs1,[A a B |Movs2],Movs).
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
hanoi(1,A,B,C,[A a B]).
hanoi(N,A,B,C,Movs) :N > 1,
N1 is N 1,
lemma(hanoi(N1,A,C,B,Movs1)),
hanoi(N1,C,B,A,Movs2),
append(Movs1,[A a B |Movs2],Movs).
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
142 / 192
Hanoi (cont.)
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
hanoi(N,Discos,Movs) :hanoi(N,A,B,C,Movs),
Discos = [A,B,C].
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
143 / 192
Fobonacci
Introduccon
Antecedentes
Un ejemplo clasico
es Fibonacci: el numero
N de
Nociones de
Logica
con
Relacion
Logica
fibo(1,1).
fibo(2,1).
fibo(N,F) :N > 2,
N1 is N - 1,
fibo(N1,F1),
N2 is N - 2,
fibo(N2,F2),
F is F1 + F2,
asserta(fibo(N,F)).
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
144 / 192
Fibonacci (cont.)
Introduccon
Antecedentes
haciendolo.
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
ffibo(N,F) :- ffibo(2,N,1,1,F).
Aritmetica
Algunos
Ejemplos
ffibo(M,N,F1,F2,F2) :- M >= N.
ffibo(M,N,F1,F2,F) :M < N,
M1 is M + 1,
NF2 is F1 + F2,
ffibo(M1,N,F2,NF2,F).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
145 / 192
ejemplos
Mas
Introduccon
Antecedentes
Nociones de
Logica
es usando assert y
con
Relacion
Logica
retract.
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Un predicado util
es repeat:
repeat.
repeat :- repeat.
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
146 / 192
Usos de repeat
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
consulta(Archivo) :see(Archivo),
procesa,
seen.
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
147 / 192
Alternativamente
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
consult(Archivo) :open(Stream,Archivo,r),
procesa(Stream),
close(Stream).
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
procesa :repeat,
read(Clausula),
procesa(Clausula), !.
procesa(X) :end of file(X), !.
procesa(Clausula) :asserta(Clausula), fail.
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
148 / 192
Variables Globales
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
149 / 192
Name
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
name(Atomo,ListaAscci)
?- name(abc,L).
L = [97,98,99]
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
gensym(Prefijo,Valor) :var(Valor),
atom(Prefijo),
obten valor(gensym(Prefijo),N),
N1 is N + 1,
actualiza var global(gensym(Prefijo),N1),
concatena(Prefijo,N1,Valor), !.
Estructuras
Parciales
Definite
(INAOE)
2012
150 / 192
Cont.
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
concatena(X,Y,XY) :name(X,LX),
name(Y,LY),
append(LX,LX,LXY),
name(XY,LXY).
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
151 / 192
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
de
iterativo y resuelve el problema de pasar informacion
a la otra por medio de backtracking.
una iteracion
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
152 / 192
findall(Var,Pred,Lista).
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
clases(juan,prolog,miercoles).
clases(juan,cocina,jueves).
clases(juan,tenis,viernes).
clases(maria,ingles,lunes).
clases(maria,tenis,jueves).
clases(maria,algebra,miercoles).
?- findall(Dia,clases( , ,Dia), Dias).
Dias = [miercoles,jueves,viernes,lunes,jueves,miercoels]
?- findall(Materia,clases( ,Materia, ), Materias).
?- findall(Nombre/Materia, clases(Nombre,Materia, ),L).
?- findall(Clase,clases(juan,Clase, ),L).
Estructuras
Parciales
Definite
(INAOE)
2012
153 / 192
Cont.
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
colecta(Sols) :retract(lista(X)), !,
( X == fondo, !, Sols = []
; Sols = [X|Resto],
colecta(Resto)
).
(INAOE)
2012
154 / 192
Cont.
Introduccon
Antecedentes
Nociones de
Logica
error
El codigo tiene un pequeno
con
Relacion
Logica
?- findall(X,member(X,[alto,ancho,fondo,peso,color,marca]),L).
L = [alto,ancho]
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
?- listing(lista).
lista(peso).
lista(color).
lista(marca).
lista(fondo).
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
155 / 192
Posible solucion
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
; encuentra
todas([],Sols)
).
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
encuentra
todas(Inter,Res) :retract(todas las sols(Sol1),
!,
encuentra
todas(Sol1, Inter, Res).
encuentra
todas([],Res,Res).
encuentra todas({X},Inter,Res) :
encuentra
todas([X|Inter],Res).
(INAOE)
2012
156 / 192
Otra posibilidad
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
; encuentra
todas(MarcaRef,[],L)
).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
encuentra
todas(MarcaRef,Inter, Sol) :recorded(las sols, X, Ref), !,
erase(Ref),
( Ref = MarcaRef > Inter = Sol
; encuentra
todas(MarcaRef,[X|Inter],Sol)
).
(INAOE)
2012
157 / 192
Bagof
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
158 / 192
setof
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
?- setof(Materia,DiaNombre
clases(Nombre,Materia,Dia),Mats).
Mats = [algebra,cocina,ingles,prolog,tenis]
Listas
Aritmetica
Algunos
Ejemplos
Control
Otro ejemplo:
copy(A,B) :- setof(X,A(A=X),[B]).
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
159 / 192
bagof (cont.)
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
verifica(X) :- + + X.
Algunos
Ejemplos
Control
var(X) :- + + X = a, + + X = b.
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
(i.e., lo unico
que instancia a a y b al mismo tiempo
es una variable)
Otro ejemplo util:
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
160 / 192
Operadores
Operadores
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
161 / 192
Operadores
Operadores
Introduccon
Antecedentes
Nociones de
Logica
La definicion
(representacion
real) se puede ver con
display:
con
Relacion
Logica
H :- T
f :- g, h, i
a :- b,c,d is 3 + 4
[1, 2, 3, 4]
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todo la sintaxis
operadores.
La ventaja que tiene es que uno puede definir sus
propios operadores!!
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
162 / 192
Operadores
Ejemplo
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
directivos): :- op(Numero,Forma,Nombre).
Aritmetica
:- op(150,xfx,sobre).
:- op(200,xfx,es un).
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
163 / 192
Operadores
Operadores
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
El numero
o la precedencia dependen de la
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
164 / 192
Operadores
Operadores
Introduccon
Antecedentes
Nociones de
Logica
Tipos de operadores:
con
Relacion
Logica
infix
xfx, xfy, yfx
prefix
fx, fy
postfix xf, yf
f = operador, X y Y = argumentos
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
=0
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
165 / 192
Operadores
Operadores
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
:- op(500,yfx,+).
a+b+c
=> (a + b) + c
:- op(500,xfy,+).
a+b+c
=> a + (b + c)
not not p
not (not p)
=> fy
=> fx
:- [archivo1, archivo2].
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
166 / 192
Operadores
Ejemplos
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
y(sobre(a,b),y(sobre(b,c),sobre(c,d))).
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
:- op(100,fx,la).
:- op(299,xfx,de).
:- op(300,xfx,es).
es(de(la(caldera),la(temperatura)),200).
Estructuras
Parciales
Definite
(INAOE)
2012
167 / 192
Operadores
ejemplos
Mas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
:- op(100,xfx,en).
:- op(100,xfx,y).
:- op(200,xfx,da).
:- op(300,fx,junta).
Elem en [Elem| ].
Elem en [ |T] :Elem en T.
junta [] y L da L.
junta [H|L1] y L2 da [H|L3] :junta L1 y L2 da L3.
?- a en [1,s,a,d].
yes
?- junta [1,2] y [3,4] da L.
L=[1,2,3,4]
(INAOE)
2012
168 / 192
Estructuras Parciales
Estructuras Parciales
Introduccon
Antecedentes
Algo comun
en Prolog es trabajar con estructuras
Nociones de
Logica
con
Relacion
Logica
parcialmente definidas.
Un ejemplo donde se ve esto, es en la definicion
de
append
Sintaxis
append([],L,L).
append([H|T],L,[H|R]) :append(T,L,R).
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
se podra
solucionar.
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
169 / 192
Estructuras Parciales
EStructuras Parciales
Introduccon
Antecedentes
Nociones de
Logica
Es comun
ponerlo como diferencia de listas: L1 L2
e.g., L1/L2)
(pero puede usarse otra notacion,
[1,2,3] = [1,2,3] - []
= [1,2,3,4,5] - [4,5]
= [1,2,3|T] - T
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
?- append([1,2,3|T]-T,[4,5,6|R]-R,L3).
T = [4,5,6|R]
L3 = [1,2,3,4,5,6|R]-R
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
? - append([a,b,c,d|T1]-T1,[e,f,g|T2]-T2,Z-[]).
2012
170 / 192
Estructuras Parciales
Estructuras Parciales
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Si queremos anadir
anade(Elem,Lista-[Elem|T],Lista-T).
Sintaxis
Listas
?- anade(a,[1,2,3|R]-R,X).
R = [a|T],
X = [1,2,3,a|T]-T
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
171 / 192
Estructuras Parciales
Estructuras Parciales
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
voltea(L,LV) :- voltea2(L-[],LV-[]).
Algunos
Ejemplos
voltea2(A-Z,L-L) :- A == Z, !.
voltea2([H|T]-Z,RL-RZ) :voltea2(T-Z,RL-[H|RZ]).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
172 / 192
Estructuras Parciales
Mas ejemplos
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Para quicksort:
qsort2([],Z-Z).
qsort2([H|T],A1-Z2) :divide(H,T,Men,May),
qsort2(Men,A1-[H|Z1]),
qsort2(May,Z1-Z2).
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
173 / 192
Estructuras Parciales
Introduccon
Una aplicacion
comun,
es ir aumentando una estructira
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
?- busca(pepe,Dict,N).
N = 75
Algunos
Ejemplos
Control
?- busca(juan,Dict,1432).
yes
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
?- busca(pancrasio,Dict,2816).
Dict = [(juan,1432), (pepe,75), (maria, 3214), (pancrasio,28
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
174 / 192
Estructuras Parciales
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
busca(Llave,[(Llave,Valor)|Dict],Valor).
busca(Llave,[(Llave1, )|Dict],Valor) :Llave = Llave1,
busca(Llave,Dict,Valor).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
175 / 192
Estructuras Parciales
Estructuras Parciales
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
elementos
menores y del derecho elementos mayores que el nodo
raz.
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
176 / 192
Estructuras Parciales
Estructuras Parciales
Introduccon
Antecedentes
binario:
Nociones de
Logica
arbol binario(vacio).
arbol binario(arbol(Nodo,Izq,Der)) :arbol binario(Izq),
arbol binario(Der).
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
177 / 192
Estructuras Parciales
Diccionario (cont.)
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
lo podemos
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
178 / 192
Estructuras Parciales
Diccionario (cont.)
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
2012
179 / 192
Estructuras Parciales
de I/O
Mas
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
read(X).
tab(N).
get0(C).
write(X).
nl.
get(C).
put(C).
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
?- consult(Archivo).
:- [Archivo]
?- reconsult(Archivo).
:- [-Archivo].
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
180 / 192
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Algo facil
de hacer en Prolog es escribir parsers.
De hecho Prolog fue usado inicialmente para
Aritmetica
Algunos
Ejemplos
clausulas
de Horn en DCGs.
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
181 / 192
DCGs
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
de CFG:
DCG son una extension
Un smbolo no terminal o terminal puede ser cualquier
Listas
predicado de Prolog
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
182 / 192
DCGs
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
183 / 192
DCGs
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
184 / 192
DCGs (cont.)
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
oracion(Lista) :sujeto(Suj),
predicado(Pred),
append(Suj,Pred,Lista).
sujeto(Suj) :articulo(Art),
sustantivo(Sust),
append(Art,Sust,Suj).
articulo([el]).
articulo([la]).
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
185 / 192
DCGs (cont.)
Introduccon
Antecedentes
Nociones de
Logica
?- oracion([el,hombre,come,la,manzana],[]).
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
186 / 192
DCGs (cont.)
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
traduce al codigo
de arriba.
Control
Selectores y
Acceso a
Predicados y
Programas
i.e.:
traduccion,
?- oracion([el,hombre,come,la,manzana],[]).
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
187 / 192
Phrase
Introduccon
Antecedentes
Nociones de
Logica
con
Relacion
Logica
?- phrase(oracion,[el,hombre,come,la,manzana]).
?- phrase(sujeto,[la,manzana]).
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
En la notacion,
se permiten incluir llamados entre
corchetes.
Tambien
podemos anadir
argumentos.
mas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
188 / 192
TITULO
Introduccon
que genera
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
?- oracion(Arbol,[el,hombre,come,la,manzana],[]).
Arbol = oracion(suj(art(el),
sust(hombre)),
pred(verb(come),
suj(art(la),
sust(manzana)))).
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
189 / 192
DCGs (cont.)
Introduccon
Antecedentes
Algo comun
y numero:
es revisar por genero
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
190 / 192
DCGs (cont.)
Introduccon
Antecedentes
y regresar su
resultado:
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
191 / 192
DCGs (cont.)
Introduccon
numero
cambia:
Antecedentes
Nociones de
Logica
con
Relacion
Logica
Sintaxis
Listas
Aritmetica
Algunos
Ejemplos
Control
Selectores y
Acceso a
Predicados y
Programas
Todas las
soluciones
Operadores
Estructuras
Parciales
Definite
(INAOE)
2012
192 / 192