PDF de programación - Programación Práctica en Prolog

Imágen de pdf Programación Práctica en Prolog

Programación Práctica en Prologgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 7 de Febrero del 2018)
657 visualizaciones desde el 7 de Febrero del 2018
157,8 KB
31 paginas
Creado hace 24a (13/10/1999)
Universidad de Oviedo
Escuela Universitaria de Ingeniería
Técnica de Informática de Oviedo

Programación Práctica en

Prolog

Jose E. Labra G.

http://lsi.uniovi.es/~labra

Área de Lenguajes y Sistemas Informáticos

Departamento de Informática

Octubre - 1998

Tabla de Contenidos
1
Introducción _________________________________________________________ 3
2 Hechos ______________________________________________________________ 3
3 Reglas ______________________________________________________________ 3
Reglas simples______________________________________________________ 3
3.1
Reglas con Variables _________________________________________________ 4
3.2
3.3
Reglas Recursivas ___________________________________________________ 4
3.4 Utilización de funciones _______________________________________________ 4
3.5 Datos Compuestos ___________________________________________________ 4
4 Unificación __________________________________________________________ 4
5 Listas _______________________________________________________________ 6
5.1 Definición _________________________________________________________ 6
5.2
Recorrer una lista ____________________________________________________ 6
Recorrer una lista tomando elementos de dos en dos___________________________ 7
5.3
5.4
Búsqueda de elementos en una lista_______________________________________ 7
5.5 Generación de una lista mediante concatenación de otras dos ____________________ 8
5.6 Descomposición de una lista en partes_____________________________________ 8
5.7 Generación de una lista filtrando elementos de otra lista ________________________ 9
5.8 Aplicación de un predicado a todos los elementos ____________________________ 9
5.9
Permutaciones de una lista _____________________________________________ 9
6 Aritmética ___________________________________________________________ 9
7 Aritmética con Listas _________________________________________________ 11
7.1 Obtener un valor a partir de una lista _____________________________________ 11
7.2 Acumulación de Resultados ___________________________________________ 11
7.3
Combinación miembro a miembro de los elementos de dos listas ________________ 11
7.4 Generación de una lista a partir de un valor ________________________________ 11
7.5 Generación de listas por filtrado de elementos ______________________________ 12
7.6
Clasificación de listas________________________________________________ 12
7.7
Creación de otra estructura a partir de una lista______________________________ 13
7.8 Otras Estructuras Recursivas___________________________________________ 13
8 Predicados Internos __________________________________________________ 14
Conversión de tipos _________________________________________________ 14
Chequeo de tipos ___________________________________________________ 14
Inspección de estructuras _____________________________________________ 15
Predicados meta-lógicos ______________________________________________ 16
8.4.1 Chequeo de tipo___________________________________________________________ 16
8.4.2 Comparación de términos no básicos ___________________________________________ 16
8.4.3 Conversión de Datos en Objetivos _____________________________________________ 17
Corte____________________________________________________________ 18
8.5.1 Aplicaciones del Corte ______________________________________________________ 18
Predicados Extra-lógicos _____________________________________________ 21
8.6.1 Entrada/Salida ____________________________________________________________ 21
8.6.2 Acceso a la Base de Datos ___________________________________________________ 23
Predicados de Segundo Orden__________________________________________ 24
9 Ejercicios Propuestos _________________________________________________ 25
10 Bibliografía Comentada _______________________________________________ 28
11 Indice ______________________________________________________________ 30

8.1
8.2
8.3
8.4

8.7

8.5

8.6

Programación Práctica en Prolog

Chequeo de tipo

Introducción

1
Con estos apuntes se muestran las diferentes características del núcleo del lenguaje Prolog mediante sencillos
ejemplos. Se ha realizado un tratamiento especial a las listas y a los diversos esquemas recursivos para trabajar con
listas. El objetivo es ayudar al lector a identificar esquemas de programación que puedan servirle para resolver
problemas similares. No se ha pretendido realizar una guía detallada sino una presentación práctica informal del
lenguaje. El lector que esté interesado en profundizar en el lenguaje, deberá consultar los libros de la bibliografía.

Con el fin de facilitar la lectura, se utilizan los siguientes símbolos:

Clave: 4
.
&
(

Punto importante a recordar
Posibles ejercicios
Comentarios avanzados
Notas sobre portabilidad

En la presentación de ejemplos se utiliza una tabla escribiendo el código y las preguntas en la parte izquierda y los
comentarios en la parte derecha.

2 Hechos

/* Relacion Progenitor */
progenitor(pilar,belen).
progenitor(tomas,belen).
progenitor(tomas,lucia).
progenitor(belen,ana).
progenitor(belen,pedro).
progenitor(pedro,jose).
progenitor(pedro,maria).

Se describen una serie de hechos conocidos sobre una
familia.

4 Sintaxis de Prolog: Constantes y predicados
empiezan por minúscula. Los hechos acaban en punto.
Variables comienzan por mayúscula.

El programa anterior debe ser cargado en el sistema. Una vez cargado, es posible realizar preguntas:

| ?- progenitor(pilar,belen).
Yes

El sistema puede responder:

1.-Yes: Se puede deducir y el objetivo no tiene variables.

| ?- progenitor(pilar,lucia).
No

| ?- progenitor(belen,X).
X = ana ;

X = pedro

3 Reglas

3.1 Reglas simples
/* Reglas */
cuida(belen,pedro):-paro(belen),
bueno(pedro).

/* 2 hechos más */
paro(belen).
bueno(pedro).

2.-No: No puede deducir a partir del programa
La respuesta No indica que no se puede deducir. En la
vida real, podría ocurrir que pilar fuese madre de lucía
(parece lo más lógico) pero el sistema supone que todo lo
que no está declarado es falso1
3.- Substitución de Respuesta: Se puede deducir y el
objetivo tiene variables. Se indica el valor que toman las
variables en la resolución del objetivo.

En caso de que haya más de una solución. Cuando el
sistema obtiene una solución espera a que el usuario
introduzca <; > para solicitar más soluciones o <Enter>
para finalizar. La búsqueda de otras soluciones se realiza
mediante backtracking

La regla equivale a: “Belén cuida a Pedro si belén está en
paro y Pedro es bueno”. En lógica de predicados sería:

paro(belen)(cid:217)bueno(pedro)ficuida(belen,pedro)

El símbolo :- podría interpretarse como: ‹ (si)


1 Presunción de mundo cerrado (CWA-closed world assumption)

3

Programación Práctica en Prolog

Chequeo de tipo

3.2 Reglas con Variables
madre(X,Y):-mujer(X),
progenitor(X,Y).

mujer(pilar). mujer(belen).
mujer(lucia). mujer(ana).
mujer(maria).
hombre(tomas). hombre(pedro).
hombre(jose).

| ?- madre(belen,pedro).
yes

| ?- madre(X,belen).
X = pilar ;

no

| ?- madre(belen,X).
X = ana ;

X = pedro

no

| ?- madre(X,Y).
X = pilar ,
Y = belen ;

X = belen ,
Y = ana ;

X = belen ,
Y = pedro ;

no

3.3 Reglas Recursivas

antepasado(X,Y):-progenitor(X,Y).

antepasado(X,Y):-progenitor(X,Z),
antepasado(Z,Y).

| ?- antepasado(belen,X).
X = ana ;

X = pedro ;

X = jose ;

X = maria ;

no

| ?- antepasado(X,belen).
X = pilar ;

X = tomas ;

no

Equivale a:
Para todo X e Y, si X es mujer y X es el progenitor de Y,
entonce X es la madre de Y

4 En lógica de predicados:
"x"y(mujer(x)(cid:217)progenitor(x,y)fimadre(x,y))

La programación lógica basa su modelo en la
utilización de relaciones, lo cual permite que un
mismo procedimiento
sirva para diferentes
propósitos dependiendo de qué variables están
instanciadas 2

En el ejemplo, una misma regla madre sirve para:

Comprobar si belen es madre de pedro.
Calcular la madre de belén
Calcular los hijos de belén
Calcular parejas de madres/hijos

4 Obsérvese que
corresponden a cuantificadores existenciales, es decir:

las variables de

los objetivos

?- madre(belen,X) equivale a: ? $x (madre(belen,x))

Téngase en cuenta que a la hora de resolver la pregunta
madre(belen,X) con la cabeza de la regla madre(X,Y) es
necesario renombrar la variable X

El lenguaje Prolog realiza internamente un proceso de
unificación que se describe en la página 4.

En general, en una definición recursiva, es necesario
considerar 2 casos:
Caso básico: Momento en que se detiene
computación
Caso Recursivo: Suponiendo que ya
se ha
solucionado un caso más simple, cómo descomponer
el caso actual hasta llegar al caso simple.

la

4 Tanto el caso básico como el caso recursivo no
tienen porqué ser únicos (puede haber varios casos
básicos y varios casos recursivos)
Las definiciones recursivas se resuelven de la misma
forma que las reglas comunes. En la traza de este tipo
de definiciones
importancia el
renombramiento de variables.

tiene especial

& Considerando la relación progenitor como un
enlace entre dos nodos de un grafo. La relación
antepasado indicaría si hay camino entre dos nodos
del grafo dirigido acíclico formado por la relación
progenitor. Este tipo de relaciones se utiliza en
diversos contextos como la búsqueda de caminos entre
ciudades,
la simulación de movimientos de un
autómata, etc.
. Describir en Prolog una serie de caminos entre
diversas ciudades y construir un predicado que indique


2 Se dice que una variable está instanciada si tiene un valor concreto (en realidad ya no sería una variable)

4

Programación Práctica en Prolog

Chequeo de tipo

si 2 ciudades están
  • Links de descarga
http://lwp-l.com/pdf8653

Comentarios de: Programación Práctica en Prolog (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