PDF de programación - Principios de Programación Lógica

Imágen de pdf Principios de Programación Lógica

Principios de Programación Lógicagráfica de visualizaciones

Publicado el 15 de Septiembre del 2018
577 visualizaciones desde el 15 de Septiembre del 2018
401,8 KB
57 paginas
Creado hace 17a (17/10/2006)
Principios de Programación Lógica

Ingeniería Informática

Departamento de Lenguajes y

Ciencias de la Computación

Universidad de Málaga

Contenido

1) Objetos, Relaciones y Objetivos
2) Datos: Objetos y Términos
3) Procedimientos: Hechos y Reglas
4) Programa Principal: Objetivos
5) Semántica Operacional de Prolog
6) Prolog = Programación Lógica

Principios de Programación Lógica

2

Objetos, Relaciones y Objetivos

Programas lógicos y cómputos

Programa lógico (o relacional): conjunto de relaciones entre
objetos

Cómputo: deducción controlada y constructiva de que un objetivo
OOOO es consecuencia lógica de las relaciones definidas en un
programa lógico PPPP

P P P P OOOO

Principios de Programación Lógica

4

Objetos, relaciones y objetivos

Objetos:

se corresponden con los datos
se representan mediante términos

Relaciones:

se corresponden con los procedimientos
se definen mediante hechos y reglas

Objetivos:

se corresponden con el programa principal
se definen mediante consultas

Principios de Programación Lógica

5

¿Cómo se escribe un programa lógico?

Para escribir un programa lógico debemos identificar:

qué objetos intervienen en el problema,
cuáles son las relaciones entre éstos, y
qué objetivos queremos alcanzar

Una vez identificados los elementos anteriores debemos:

representar los objetos mediante términos
definir las relaciones mediante hechos y reglas
definir los objetivos mediante consultas

Ilustraremos la metodología anterior mediante un ejemplo
Problema: escribir un programa lógico que defina relaciones de
parentesco y deduzca qué personas están emparentadas

Principios de Programación Lógica

6

La familia a considerar

Antonio

María

Elena

Carlos

Eva

David

Fernando

Silvia

Emilio

Principios de Programación Lógica

Identificando objetos y relaciones

objetos

relaciones

Antonio

María

Elena

Carlos

Eva

David

Fernando

Silvia

Emilio

Principios de Programación Lógica

7

8

Representando objetos mediante términos

Objetos:

son las personas que forman la familia

representados por términos (sus nombres en minúscula)

Ejemplos:

Antonio  antonio
María  maría

Principios de Programación Lógica

9

Definiendo relaciones mediante hechos

Relaciones:

son las relaciones de paternidad y maternidad

definidas mediante hechos (relaciones incondicionales)

Ejemplos:

Antonio es padre de Carlos  padre(antonio,carlos).
María es madre de Carlos  madre(maría,carlos).

Principios de Programación Lógica

10

La familia completa definida en Prolog

padre(antonio,carlos).

padre(antonio,eva).

padre(carlos,fernando).

padre(carlos,silvia).

padre(david,emilio).

madre(maría,carlos).

madre(maría,eva).

madre(elena,fernando).

madre(elena,silvia).

madre(eva,emilio).

Principios de Programación Lógica

11

Deduciendo objetivos

Objetivos:

son preguntas sobre el parentesco

definidas mediante consultas

Ejemplos:

¿es David padre de Emilio?  :- padre(david,emilio).
¿quiénes son los hijos de Eva?  :- madre(eva,X).
¿quién es el padre de Silvia?  :- padre(P,silvia).

Principios de Programación Lógica

12

Identificando relaciones implícitas

abuelo

Antonio

María

Elena

Carlos

Eva

David

Fernando

Silvia

hermanos

Emilio

primos

Principios de Programación Lógica

13

Una mala idea...

Definimos las relaciones extra mediante hechos:

hermanos(carlos,eva).

hermanos(fernando,silvia).

Inconvenientes:

tamaño excesivo
propenso a errores
mantenimiento (nacimientos, etc.)
adaptabilidad a otras situaciones (familias)

Sería preferible definir esta relación de forma genérica,
identificando las condiciones bajo las cuales dos personas “A” y
“B” son hermanos

Principios de Programación Lógica

14

Definiendo relaciones mediante reglas

¿Cómo podemos definir la relación “hermanos”?

“A y B son hermanos si comparten los padres”

Definiremos la relación condicional anterior mediante la regla:

hermanos(A,B) :-

padre(P,A),

madre(M,A),

padre(P,B),

madre(M,B),

A \== B.

Principios de Programación Lógica

Ejercicios

Define las siguientes relaciones de parentesco:

1. abuelo(A,B) – A es abuelo de B
2. tio(A,B) – A es tío de B
3. primos(A,B) – A y B son primos
4. procrearon(A,B) – A y B tienen algún hijo en común

Principios de Programación Lógica

15

16

Reglas para identificar objetos y relaciones

Objetos: nombres propios y comunes, en singular o plural

Relaciones: verbos y formas verbales

A veces es posible más de una formalización, y la diferencia entre
objeto y relación no está clara...

Una relación determina un conjunto de objetos: aquéllos que la
satisfacen. Por tanto, una relación puede emplearse para
referirnos a estos objetos.

Ejemplo: “Los hijos de Antonio”  padre(antonio,H)

Principios de Programación Lógica

17

Datos: Objetos y Términos

Datos: objetos y términos

Los objetos (datos) se representan mediante términos:

constante

átomo

número

entero

real

término

variable

estructura

Los términos son adecuados para el procesamiento simbólico

Principios de Programación Lógica

19

Átomos

Uso: representan objetos concretos mediante un nombre; es
decir, denominan a un objeto en particular

Sintaxis:

secuencias de letras, dígitos y _ comenzando por minúscula
ejemplos: antonio, x, lista_vacía, nil, x25

secuencias de caracteres entre apóstrofos
ejemplos: ‘antonio garcía’, ‘Antonio’

secuencias de símbolos especiales
ejemplos: +, -, =, ===, ::=, :=, <->, :^:

Principios de Programación Lógica

20

Números

Uso: representan números enteros y reales

Sintaxis:

enteros: 2, 34, -56

reales: -0.0092, 4.5e-5

Se aplican las restricciones típicas de rango (enteros y reales) y
precisión (reales)

Principios de Programación Lógica

21

Variables

Uso: representan objetos por determinar. Las variables son
semejantes a incógnitas: no se les puede asignar valores a
voluntad.

Sintaxis:

Secuencia de letras, dígitos y _ comenzando por mayúscula o _

Ejemplos:

X1
Padre
_X
Num_Telef
ListaClientes

Principios de Programación Lógica

22

Estructuras (I)

Uso: representan objetos compuestos que pueden ser concretos
(no contienen variables) o por determinar (contienen variables)

Sintaxis:

sin espacios

átomo(término1,...,términon)

nombre

aridad

Al par nombre/aridad se le denomina functor de la estructura
Ejemplos:

fecha(17,agosto,2004) % fecha/3

cita(miguel,fecha(Día,enero,2006)) % cita/2

Principios de Programación Lógica

23

Estructuras (II)

Los functores no se declaran.

Puede emplearse el mismo nombre con diferentes aridades: se
trata de functores distintos

Ejemplo:

fecha(17,agosto,2004)

% fecha/3

fecha(14,abril)

% fecha/2

Principios de Programación Lógica

24

Sintaxis (simplificada) de los términos

término ::= átomo

| número

| variable

| estructura

estructura ::= átomo(argumentos)

argumentos ::= término

| término , argumentos

Más adelante extenderemos esta sintaxis con operadores y
listas

Principios de Programación Lógica

25

Prolog comprueba la sintaxis de los términos...

Prolog detecta y señala los siguientes errores sintácticos

2pi

fecha(12,,2001)

fecha()

cita(fernando,fecha(2,diciembre,2001)

lista (a,b,c)

F(X,Y)

Principios de Programación Lógica

26

Pero la intención es lo que cuenta...

La intención es representar las fechas por términos de la forma:

fecha(día,mes,año)

donde día ∈∈∈∈ {1,...,31}

mes ∈∈∈∈ {enero,...,diciembre}
año ∈∈∈∈ {2000,...}

Pero Prolog no puede detectar usos inadecuados:

fecha(enro,2,2001)

La sintaxis es correcta, pero el orden de los argumentos no es el
esperado y enro no es un mes válido
Prolog no conoce las intenciones del programador: no hay
declaraciones de tipo

Principios de Programación Lógica

27

Representación física vs. sintáctica

punteros

arrays
...

registros

objeto a

representar

términos

constantes

functores

...

programador imperativo

programador lógico

Principios de Programación Lógica

28

¿Cómo se representa un objeto en Prolog?

El programador lógico debe decidir una sintaxis adecuada para
cada tipo de dato:

Constantes:

qué nombre o número resulta apropiado

Variables:

se emplean para objetos por determinar (plantillas)

Estructuras:
functor
orden y sintaxis de los argumentos, recursión.

Sin embargo, no hay forma de comunicar a Prolog esta intención:
no hay declaraciones de tipo

Principios de Programación Lógica

29

Ejemplo: representación de pilas (I)

Para representar el TAD pila, el programador debe elegir una
sintaxis adecuada

Sintaxis:

tad_pila ::= pila_vacía

| pila(cima,tad_pila)

cima::= término

Pero no es posible comunicar a Prolog esta sintaxis...

Principios de Programación Lógica

30

Ejemplo: representación de pilas (II)

Ejemplos de pilas bien formadas:

pila(a,pila(b,pila(c,pila_vacía)))

pila(a,pila(fecha(2,enero,2001),pila_vacía))

pila(pila_vacía,pila_vacía)

Ejemplos de términos Prolog que no son pilas bien formadas:

pila(pila_vacía)

pila(a,pila(b))

Principios de Programación Lógica

Ejemplo: representación de pilas (III)

Las estructuras que contienen variables son plantillas:

Ejemplos:
pilas con 2 elementos y a en la cima

pila(a,pila(X,pila_vacía))

pilas de 3 elementos cualesquiera

pila(X,pila(Y,pila(Z,pila_vacía)))

pilas de al menos un elemento

pila(X,Y)

pilas que tienen una b como segundo elemento

pila(X,pila(b,Y))

Las dos últimas plantillas suponen que Y es una pila
Principios de Programación Lógica

31

32

Ejemplo: circuitos digitales (I)

x
y

z

Objetos:

variables de entrada (a,b,c,...,x,y,z)
puertas lógicas (or, and, nand, not)

Principios de Programación Lógica

33

Ejemplo: circuitos digitales (II)

Representación:

entradas -> átomos
puertas -> estructuras or/2,and/2,nand/2,not/1

Sintaxis:

circuito::= entrada

| or(circuito, circuito)

| and(circuito, circuito)

| nand(circuito, circuito)

| not(circuito)

entrada ::= átomo

Principios de
  • Links de descarga
http://lwp-l.com/pdf13496

Comentarios de: Principios de Programación Lógica (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad