apunte05 todo

Upload: jheferson-salas

Post on 08-Feb-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/22/2019 Apunte05 Todo

    1/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    1

    Lenguajes de Programacin

    Captulo V:

    Programacin Lgica

  • 7/22/2019 Apunte05 Todo

    2/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    2

    Lenguajes de Programacin

    5.1 Breve Introduccin al Clculo

    de Predicados

  • 7/22/2019 Apunte05 Todo

    3/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-3

    Lenguajes de Programacin

    Definiciones Bsicas

    Proposicin:sentencia lgica que puede serverdadera o falsa.

    Se construye de objetos y relaciones. Lgica formal provee mtodos para verificar su validez

    Lgica Simblica:permiteexpresarproposiciones,relaciones entre proposiciones ycmo inferir nuevas proposiciones que sonverdaderas.

    Clculo de Predicado:Forma particular de lgica

    simblica usada en programacin lgica.

  • 7/22/2019 Apunte05 Todo

    4/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-4

    Lenguajes de Programacin

    Objetos y Trminos Compuestos

    Objetosse representan como un nico trmino,que puede ser:

    constante: representa un nico objeto variable: puede representar diferentes objetos

    Trmino compuesto: consiste de functory unalista de parmetros Un trmino con nparmetros se denomina n-tupla.

    El trminopadre(maria, jess)es una 2-tupla.

  • 7/22/2019 Apunte05 Todo

    5/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-5

    Lenguajes de Programacin

    Proposiciones

    Proposicionespueden ser: Atmicas:corresponde a un nico trmino compuesto

    Compuestas: dos o ms proposiciones atmicasconectadas por operadores lgicos.

    Una proposiciones puede ser: Hecho: se define como una verdad (axioma)

    Consulta: la verdad debe ser probada (teorema)

  • 7/22/2019 Apunte05 Todo

    6/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-6

    Lenguajes de Programacin

    Proceso de Resolucin

    Presencia de variables requiere de un proceso decalce(matching) que al reemplazar sus valores

    produce una verdad (xito). Este proceso se denomina unificacin.

    Asignacin temporal de valores a variables sedenomina instanciacin.

    Fallas (no xito) en la instanciacin requiere debacktracking.

  • 7/22/2019 Apunte05 Todo

    7/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-7

    Lenguajes de Programacin

    Clusulas de Horn

    Clusulas de Hornsimplifican el proceso deresolucin, y permiten representar la mayora de

    las proposiciones lgicas. Slo permite dos tipos de formas:

    Existe slo una proposicin atmica en la izquierda dela clusula (clusula con cabeza)

    El lado izquierdo est vaco (clusula sin cabeza) Clusulas con cabeza se usan para definir reglas,

    en cambio clusulas sin cabezas slo establecen

    ciertos hechos.

  • 7/22/2019 Apunte05 Todo

    8/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-8

    Lenguajes de Programacin

    Significado

    Declarativo versus ProceduralLa clusula:

    P

  • 7/22/2019 Apunte05 Todo

    9/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-9

    Lenguajes de Programacin

    Conclusiones

    Programacin Lgica consiste bsicamenteen definir un conjunto de reglas y hechos

    (hiptesis). El sistema luego debe ser capaz de inferir si

    una determinada proposicin (meta) es una

    verdad. Prolog est basado en el uso de clusulas de

    Horn.

  • 7/22/2019 Apunte05 Todo

    10/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    10

    Lenguajes de Programacin

    5.2 Introduccin a Prolog

  • 7/22/2019 Apunte05 Todo

    11/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-11

    Lenguajes de Programacin

    Caractersticas de Prolog

    Basado en Lgica y programacin declarativa

    Produce estilo de programacin orientado a metas

    No se especifica cmodebe hacerse, sino qudebe lograrse (alto nivel)

    El programador se concentra ms en el

    conocimiento que en los algoritmos Qu es conocido?(hechos y relaciones ) Qu preguntar?(cmo resolverlo)

    f

  • 7/22/2019 Apunte05 Todo

    12/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-12

    Lenguajes de Programacin

    Hechos en Prolog: Ejemplo

    padre(maria, pedro).

    padre(juan, pedro).

    padre(juan, carola).padre(pedro, ana).

    padre(pedro, paty).

    padre(paty, aldo).

    ana

    maria juan

    pedro carola

    paty

    aldo

    D t t d I f ti

  • 7/22/2019 Apunte05 Todo

    13/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-13

    Lenguajes de Programacin

    Consultas en Prolog

    ?- padre(pedro, ana).

    => yes

    ?- padre(ana, paty).=> no

    ?- padre(X, carola).

    => X = juan

    ?- padre(pedro, X).

    => X = ana ;

    => X = paty ;

    => no

    D t t d I f ti

  • 7/22/2019 Apunte05 Todo

    14/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-14

    Lenguajes de Programacin

    Consulta: Ejemplo 1

    Preguntar por el abuelo de aldo:

    X, Y : (X es padre de Y) (Y es padre de aldo)

    que se expresa en Prolog como:

    ?- padre(X, Y), padre(Y, aldo).

    => X = pedro

    Y = paty

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    15/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-15

    Lenguajes de Programacin

    Consulta: Ejemplo 2

    Preguntar por los nietos dejuan:

    X, Y : (juan es padre de X) (X es padre de Y)

    que se expresa en Prolog como:

    ?- padre(juan, X), padre(X, Y).

    => X = pedroY = ana ;

    => X = pedro

    Y = paty

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    16/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-16

    Lenguajes de Programacin

    Consulta: Ejemplo 3

    Preguntar si anay patytienen un padre en comn:

    X : (X es padre de ana) (X es padre de patricio)

    que se expresa en Prolog como:

    ?- padre(X, ana), padre(X, paty).

    => X = pedro

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    17/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-17

    Lenguajes de Programacin

    Otros Hechos

    Agregar clusulas sobre el sexo de las personas(relaciones unarias):

    femenino(maria).masculino(juan).

    masculino(pedro).

    femenino(carola).

    femenino(ana).

    femenino(paty).masculino(aldo).

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    18/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-18

    Lenguajes de Programacin

    Alternativa de definicin de

    hechosPodra haberse definido tambin con una relacin binaria:

    sexo(maria, femenino).

    sexo(juan, masculino).sexo(pedro, masculino).

    sexo(carola, femenino).

    sexo(ana, femenino).

    sexo(paty, femenino).

    sexo(aldo, masculino).

    A continuacin usaremos la forma unaria!

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    19/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-19

    Lenguajes de Programacin

    Reglas en Prolog

    La relacin:a b

    se expresa en Prolog como:a :- b.

    Una clusula de este tipo se denomina regla, quetiene la siguiente estructura:

    la cabeza(parte izquierda de :-) es la conclusin la proposicin definida en el cuerpo(parte derecha de :-)

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    20/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-20

    Lenguajes de Programacin

    Resolucin Simple

    La relacin hi jo decorresponde a:X, Y : (Y es hijo de X) (X es padre de Y)

    que se expresa en Prolog como:hijo(X, Y) :- padre(Y, X).

    Ejemplo:la meta siguiente es evaluada como:La meta: hijo(paty, pedro)se convierte en submeta padre(pedro, paty)

    Se busca este hecho: yes

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    21/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-21

    Lenguajes de Programacin

    Ejemplo de Reglas

    Se puede definir ahora varias nuevas reglas como:

    papa(X, Y) :- padre(X, Y), masculino(X).

    mama(X, Y) :- padre(X, Y), femenino(X).

    abuelo(X, Y) :- padre(X, Z), padre(Z, Y).

    hermana(X, Y) :- padre(Z, X), padre(Z, Y), femenino(X).

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    22/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    V-1-22

    Lenguajes de Programacin

    Ejemplo de Consulta

    ?- hermana(ana, paty).

    => yes

    ?- hermana(X, paty).

    => X = ana ;

    => X = paty

    oops ... paty es hermana de ella misma

    Falta excluir este caso:

    hermana(X, Y) :- diferente(X, Y), padre(Z, X),

    padre(Z, Y), femenino(X).

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    23/71

    p

    Universidad Tcnica Federico Santa Mara

    V-1-23

    Lenguajes de Programacin

    Resumiendo...

    Programas Prolog se extienden simplemente agregando ms clusulas Clusulas son de tres tipos: hechos, reglasy consultas Reglasdeclaran cosas que cuya verdad depende de otras condiciones Por medio de consultasel usuario puede solicitar al programas que

    establezca qu cosas son verdad Una clusulatiene una cabezay un cuerpo. El cuerpo son metas

    separadas por comas (conjuncin) Hechosson clusulas que no tienen cuerpo Preguntasslo tienen cuerpo

    Reglastienen cabeza y cuerpo Una evaluacin puede sustituir una variableX por otro objeto (se dice

    que X se instancia) Variables se cuantifican universalmente ()

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    24/71

    p

    Universidad Tcnica Federico Santa Mara

    V-1-24

    Lenguajes de Programacin

    Reglas Recursivas

    La relacin antepasadose define sobre la base de unaregla de descendencia directa y otra regla de descendencia indirecta:

    X, Z : (X es un antepasado de Z), si

    {X es padre de Z }

    { Y: (X es padre de Y) (Y es antepasado de Z) }

    Lo que en Prolog se expresa como :antepasado(X, Z) :- padre(X, Z). % descendiente directo

    antepasado(X, Z) :- padre(X, Y), antepasado(Y, Z). % descendiente ind.

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    25/71

    p

    Universidad Tcnica Federico Santa Mara

    V-1-25

    Lenguajes de Programacin

    Ejemplo de Consulta

    % Consultar por los descendientes de maria

    ?- antepasado (maria, X)

    => X = pedro ;

    => X = ana ;

    => X = paty ;

    => X = aldo

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    26/71

    Universidad Tcnica Federico Santa Mara

    V-1-26

    Lenguajes de Programacin

    Resolucin de Consulta

    antepasado(juan, paty)

    NO

    SI

    padre(juan, paty)

    Regla#1

    padre(juan, X)antepasado(X, paty)

    Regla#2

    antepasado(pedro, paty)

    Hecho:

    padre(juan, pedro)X=pedro

    padre(pedro, paty)

    Regla#1

    ana

    maria juan

    pedro carola

    paty

    aldo

  • 7/22/2019 Apunte05 Todo

    27/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    27

    Lenguajes de Programacin

    5.3 Tipos de Datos en Prolog

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    28/71

    Universidad Tcnica Federico Santa Mara

    V-1-28

    Lenguajes de Programacin

    Objetos de Datos en Prolog

    Objetos de datos simples

    Objetos estructurados

    Calce de operaciones fundamentales sobreobjetos

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    29/71

    Universidad Tcnica Federico Santa Mara

    V-1-29

    Lenguajes de Programacin

    Reconocimiento de Tipos

    Se reconoce el tipo de un dato por su formasintctica; no se requiere de declaracin de

    tipos Ejemplo:

    Variables se definen comienzan con primera en

    maysculas (e.g. X) Atomos comienzan con una letra en minscula

    (e.g.pedro)

    Departamento de Informtica

    j d i

  • 7/22/2019 Apunte05 Todo

    30/71

    Universidad Tcnica Federico Santa Mara

    V-1-30

    Lenguajes de Programacin

    Atomos

    1) Strings de letras, dgitos y underscore (_),comenzando con minscula

    pedro nil x_25 algo_especial 2) Strings de caracteres especiales

    ===> ...

    3) Strings con citacin simpleJuan San Francisco

    Departamento de Informtica

    L j d P i

  • 7/22/2019 Apunte05 Todo

    31/71

    Universidad Tcnica Federico Santa Mara

    V-1-31

    Lenguajes de Programacin

    Variables

    Strings de letras, dgitos y underscore,comenzando con mayscula o underscore.X Resultado _X1 _12

    Si una variable aparece una solo vez en unaclusula, se puede usar variables annima_?- padre(juan, _).

    yes % no se imprime variable

    tiene_hijo(X) :- padre(X, _).

    mbito de variable es una clusula

    Departamento de Informtica

    L j d P i

  • 7/22/2019 Apunte05 Todo

    32/71

    Universidad Tcnica Federico Santa Mara

    V-1-32

    Lenguajes de Programacin

    Ejemplo con Figuras Geomtrica

    2 4 6 8

    2

    4

    6

    P2 = (2,3)

    P1 = (1,1)

    (6,4)

    (7,1)(4,2)

    TS

    P1 = punto(1, 1)

    P2 = punto(2,3)

    S = seg(P1, P2)

    T = triangulo (punto(4,2),

    punto(6,4), punto(7,1))

  • 7/22/2019 Apunte05 Todo

    33/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    33

    Lenguajes de Programacin

    5.4 Calce de Trminos en Prolog

    Departamento de Informtica

    Lenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    34/71

    Universidad Tcnica Federico Santa Mara

    V-1-34

    Lenguajes de Programacin

    Concepto de Calce

    La operacin ms importante sobretrminos es el calce, que corresponde a la

    unificacin en el clculo de predicados. Dos trminos calzansi:Son idnticos

    Las variables en ambos trminos pueden serinstanciados, sustituyendo variables, tal que lostrminos se hacen idnticos.

    Departamento de Informtica

    Lenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    35/71

    Universidad Tcnica Federico Santa Mara

    V-1-35

    Lenguajes de Programacin

    Ejemplo de Calce

    Calzar: fecha(D, M, 2000)yfecha(D1, mayo, A1) , entonces:

    D se instancia a D1 M se instancia a mayo

    A1 se instancia a 2000

    Que como salida de Prolog se escribe: D = D1 M= mayo

    A1 = 2000

    Departamento de Informtica

    Lenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    36/71

    Universidad Tcnica Federico Santa Mara

    V-1-36

    Lenguajes de Programacin

    Ejemplo de Calce

    Calzar: fecha(D, M, 2000)yfecha(D1, julio, 1956) , entonces:

    No es posible encontrar un calce (se dice que elproceso de calce ha fracasado).

    En caso contrario, se dice que el proceso ha sidoexitoso.

    Departamento de Informtica

    Lenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    37/71

    Universidad Tcnica Federico Santa Mara

    V-1-37

    Lenguajes de Programacin

    Ejemplo de Calce en Prolog

    ?- fecha(D, M, 2000) = fecha(D1, mayo, A1).D = H86M = mayo

    D1 = H86A1 = 2000

    ?- fecha(D, M, 2000) = fecha(D1, julio, 1956).

    no

    Departamento de Informtica

    Lenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    38/71

    Universidad Tcnica Federico Santa Mara

    V-1-38

    Lenguajes de Programacin

    Reglas de Calce

    Dos trminos S y T calzan, si: Si S y T son constantes, entonces S y T calzan si ambos

    son el mismo objeto. Si S es una variabley T cualquier cosa, entonces calzan y

    S se instancia como T. Viceversa, si T es variable,entonces T se instancia como S.

    Si S y T son estructuras, entonces calzan slo si:

    S y T tienen el mismo functor, yTodas sus correspondientes componentes calzan.Instanciaciones resultantes es determinado por proceso de calce decomponentes.

    Departamento de Informtica

    U i id d T i F d i S t M Lenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    39/71

    Universidad Tcnica Federico Santa Mara

    V-1-39

    Lenguajes de Programacin

    Grado de Ajuste del Calce

    ?- fecha(D, M, 2000) = fecha(D1, mayo, A1).

    Podra haber sido calzado como:

    D = 1D1 = 1M = mayoA1 = 2000

    Pero esta forma es ms restrictiva (menos general)que la anterior.

    Prolog calza el resultado a su forma ms general!

    Departamento de Informtica

    U i id d T i F d i S t M Lenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    40/71

    Universidad Tcnica Federico Santa Mara

    V-1-40

    e gu jes de og c

    Ejemplo de Calce de Estructuras

    triangulo

    punto puntoA

    1 1 2 3

    triangulo

    punto puntoX

    4 Y 2 Z

    ?- triangulo(punto(1, 1), A, punto(2, 3)) =

    triangulo(X, punto(4, Y), punto(2, Z)).

    A = punto(4,H193)X = punto(1,1)

    Y = H193Z = 3

    Departamento de Informtica

    U i id d T i F d i S t M Lenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    41/71

    Universidad Tcnica Federico Santa Mara

    V-1-41

    g j g

    Ejemplo de Calce con Estructuras

    ?- vertical(seg(punto(1,1), punto(1,2))).

    yes

    ?- vertical(seg(punto(1,1), punto(2,Y))).

    no

    ?- horizontal(seg(punto(1,1), punto(2,Y))).

    Y = 1

    ?- vertical(seg(punto(2,3), Y)).Y = punto(2,H561)

    ?- vertical(S), horizontal(S).

    S = seg(punto(H576,H577),punto(H576,H577))

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    42/71

    Universidad Tcnica Federico Santa Mara

    V-1-42

    g j g

    Disjuncin en Clusulas

    La clusula:

    P :- Q; R.

    Se puede interpretar como:

    P :- Q.P :- R.

    La clusula:

    P :- Q, R;S, T, U.

    Se puede interpretar como:

    P :- Q, R.

    P :- S, T, U.

  • 7/22/2019 Apunte05 Todo

    43/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    43

    Lenguajes de Programacin

    5.5 Listas y Operadores

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    44/71

    Universidad Tcnica Federico Santa Mara

    V-1-44

    Listas en Prolog

    Una lista en Prolog se puede escribir como:[perro, gato, ratn, loro]

    Sin embargo esto es slo un sabor sintctico,pues Prolog lo traduce una forma de estructura.

    Si existe la estructura .(Cabeza, Cola), entonces:

    .(perro, .(gato, .(ratn, .(loro, []))))equivale a la lista anterior (que es ms legible)

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    45/71

    Universidad Tcnica Federico Santa Mara

    V-1-45

    Representacin de Listas

    Una lista define un rbol binario, similar a laslistas propias de Scheme.

    Prolog permite una notacin similar a los pares: L = [a | Cola], donde aes la cabeza (cualquier tipo) y

    Colaes el resto de la lista (debe ser una lista) .

    La lista vaca se expresa como [].

    Ejemplo:?- L2 = [ a | [b | []]].

    L2 = [a,b]

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    46/71

    Universidad Tcnica Federico Santa Mara

    V-1-46

    Algunos Posibles Operadores

    sobre Listas Membresa del objeto X en la lista L:

    member(X, L)

    Concatenacinde listas L1 y L2 en L3conc(L1, L2, L3)

    Agregarun elemento X en una lista L

    add(X, L, L1) Borrarun elemento X en una lista L

    del(X, L, L1)

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    47/71

    Universidad Tcnica Federico Santa Mara

    V-1-47

    Definicin de Operadores (1/2)

    %definicion de membresia de X en una lista L: member(X, L).

    % ============================================

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

    % concatenacion de listas L1 y L2 en lista L3: conc(L1, L2, L3).

    % ==============================================

    % concat. con lista vacia es la misma listaconc([], L, L).

    % caso de que primera lista no est vaca

    conc([X | L1], L2, [X | L3]) :- conc(L1, L2, L3).

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    48/71

    Universidad Tcnica Federico Santa Mara

    V-1-48

    Ejemplos de Operadores con

    Listas

    ?- member(X, [a, b]).

    X = a ;

    X = b ;

    no

    ?- conc([a], [b], L).

    L = [a,b] ;

    no

    ?- add(a, X, Y).

    X = H918

    Y = [a | H918] ;

    no

    ?- del(b, [a, b, c, b, d], L).

    L = [a,c,b,d] ;

    L = [a,b,c,d] ;no

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    49/71

    U e s dad c ca ede co Sa ta a a

    V-1-49

    Sublistas

    Una sublista es una parte de una lista

    El operador puede ser definido con la

    siguiente regla:

    Ejemplo:

    ?- sublist([b, X], [a, b, c, d]).

    X = c

    sublist(S, L) :- conc(L1, L2, L), conc(S, L3, L2).

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    50/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    50

    Lenguajes de Programacin

    5.6 Operadores y Aritmtica

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    51/71

    V-1-51

    Notacin de Operadores

    Las operaciones en Prolog se expresannormalmente como functores.

    Se permite tambin especificar operadoresespeciales con su relacin de precedenciamediante directivas al traductor Prolog.

    Este mecanismo permite mejorar la lecturade programas (sabor sintctico), similar a lasobrecarga de operadores en C++

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    52/71

    V-1-52

    Ejemplo de Operadores

    La expresin:

    +(*(2, a), *(b, c))

    podra escribirse como:

    2*a + b*c

    Que resulta ms legible!!

    Ejemplo en Prolog:

    ?- X = +(*(2, 3), *(4, 5)).X = 2 * 3 + 4 * 5

    ?- X is +(*(2, 3), *(4, 5)).

    X = 26 .

    ?- X is 2*3 + 4*5.

    X = 26

    Se ha supuesto que + tiene mayor precedencia que *

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    53/71

    V-1-53

    Ejemplo:

    Mximo Comn Divisor

    mcd(X, X, X).

    mcd(X, Y, D) :-X

  • 7/22/2019 Apunte05 Todo

    54/71

    V-1-54

    Ejemplo:

    Mximo Comn Divisor

    ?- mcd(100, 10, X).

    X = 10

    ?- mcd(27, 36, X).

    X = 9

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    55/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    55

    Lenguajes de Programacin

    5.7 Ejemplos de Programas

    con Estructuras

    Departamento de Informtica

  • 7/22/2019 Apunte05 Todo

    56/71

    Departamento de Informtica

    Universidad Tcnica Federico Santa Mara

    56

    Lenguajes de Programacin

    Ejemplo de Programa

    Problema de las Ocho Reinas

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    57/71

    V-1-57

    Problema de las Ocho Reinas

    1

    2

    3

    4

    5

    6

    7

    8

    1 2 3 4 5 6 7 8

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    58/71

    V-1-58

    Solucin #1 en Prolog

    solucion1([]).

    solucion1([X/Y | Otras]) :- % primera reina en X/Y

    solucion1(Otras),

    member(Y, [1,2,3,4,5,6,7,8]),

    noataque(X/Y, Otras). % Primera reina no ataca a otras

    noataque(_, []).

    noataque(X/Y, [X1/Y1 | Otras]) :-

    Y =\= Y1, % diferentes filas

    Y1 - Y =\= X1 - X, % diferentes diagonales

    Y1 - Y =\= X - X1,

    noataque(X/Y, Otras). % Primera reina no ataca a otras

    plantilla([1/Y1, 2/Y2, 3/Y3, 4/Y4, 5/Y5, 6/Y6, 7/Y7, 8/Y8]).

    solucion(S) :- plantilla(S), solucion1(S).

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    59/71

    V-1-59

    Consulta a la Solucin #1

    ?- solucion(S).

    S = [1 / 4,2 / 2,3 / 7,4 / 3,5 / 6,6 / 8,7 / 5,8 / 1] ;

    S = [1 / 5,2 / 2,3 / 4,4 / 7,5 / 3,6 / 8,7 / 6,8 / 1];

    S = [1 / 3,2 / 5,3 / 2,4 / 8,5 / 6,6 / 4,7 / 7,8 / 1]

    Departamento de InformticaL j d P i

  • 7/22/2019 Apunte05 Todo

    60/71

    p

    Universidad Tcnica Federico Santa Mara

    60

    Lenguajes de Programacin

    5.8 Control de Backtracking

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    61/71

    V-1-61

    Porqu controlar Backtracking?

    Prolog realiza backtracking automtico sifalla la satisfaccin de una clusula

    Sin embargo, en algunos casos elbacktracking automtico es ineficiente

    El programador puede controlar o prevenir

    el backtracking usandocut.

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    62/71

    V-1-62

    Ejemplo de una Funcin

    Suponga las siguientes tres reglas para unafuncin de doble escaln:

    Regla#1:Si (X

  • 7/22/2019 Apunte05 Todo

    63/71

    V-1-63

    Funcin Expresada en Prolog

    f(X, 0) :- X

  • 7/22/2019 Apunte05 Todo

    64/71

    V-1-64

    Evaluacin de la Meta

    f(1, Y)2

  • 7/22/2019 Apunte05 Todo

    65/71

    V-1-65

    Funcin Expresada en Prolog

    usando CUTf(X, 0) :- X

  • 7/22/2019 Apunte05 Todo

    66/71

    V-1-66

    Optimizando Evaluacin de

    Funcin usando CUT

    f(X, 0) :- X

  • 7/22/2019 Apunte05 Todo

    67/71

    V-1-67

    Negacin como Falla

    A Mara le gustan los animales:gusta(maria, X) :- animal(X).

    Pero no le gustan las serpientes!!

    Expresado en Prolog:

    gusta(maria, X) :- serpiente(X), !, fail;

    animal(X).

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    68/71

    V-1-68

    Ejemplos de Negacin

    La verificacin si dos expresiones difieren:

    diferente(X, Y) :- X = Y, !, fail

    ;

    true.

    El procedimiento interno not de Prolog se comporta

    como:

    not(P) :- P, !, fail

    ;

    true.

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    69/71

    V-1-69

    Aplicacin de la Negacin

    La funcin diferente ahora se puede escribir como:

    diferente(X, Y) :- not(X =Y).

    Y la regla de Maria:

    gusta(maria, X) :-

    not(X = serpiente),animal(X).

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    70/71

    V-1-70

    Problema de las 8 Reinas

    Expresada con Negacinsolucion1([]).

    solucion1([X/Y | Otras]) :- % primera reina en X/Y

    solucion1(Otras),

    member(Y, [1,2,3,4,5,6,7,8]),not ataque(X/Y, Otras). % Primera reina no ataca a otras

    ataque(X/Y, Otras) :-

    member(X1/Y1, Otras),

    (Y = Y1; % en la misma filas,

    Y1 is Y + X1 - X; % en la mismas diagonalesY1 is Y + X - X1).

    plantilla([1/Y1, 2/Y2, 3/Y3, 4/Y4, 5/Y5, 6/Y6, 7/Y7, 8/Y8]).

    solucion(S) :- plantilla(S), solucion1(S).

    Departamento de Informtica

    Universidad Tcnica Federico Santa MaraLenguajes de Programacin

  • 7/22/2019 Apunte05 Todo

    71/71

    Uso de Cut y Negacin

    Ventajas

    Se puede aumentar la eficiencia

    Se pueden expresar reglas que son mutuamenteexluyentes

    Desventajas

    Se pierde correspondencia entre significado

    declarativo y procedural Cambio del orden de las clusulas puede afectar

    significado declarativo