1


Inteligencia Artificial
2º cuatrimestre 2004
AMZI! PROLOG
Proyectos de Cursado
Ia 2004 2
AMZI! PROLOG
• Amzi! Prolog + Logic Server consiste de

componentes básicas para distintas

plataformas junto con componentes

adicionales que dependen de cada

plataforma
• Resultado: aplicaciones Prolog
independientes o embebidas
Ia 2004 3
Componentes básicas
• Logic Server: máquina virtual interpreta

código Prolog
• Logic Server Application Program Interface
(API) – interface para integrar Prolog y otros

entornos
• Listener/Debugger: consola (?- )
• Compilador
• Linker
• Runtime
Ia 2004 4
Componentes adicionales
• Language-specific Logic Server APIs -
Wrappers sobre LSAPI para C/C++, Java, VB,

Delphi.

• Database support – Interface para base de

datos externas
• Internet tools
• otras...
Ia 2004 5
Componentes y Archivos
Listener/Debugger
Compilador
Linker
Código Fuente
Código Compilado
Módulo ensamblado
*.PLM
*.XPL
*.PRO
*.PPJ Proyecto
Runtime Ejecución
6
Listener
Item Listener
Opciones para

abrir, cerrar la

consola,

(re)consultar
archivos,

(des)activar
herramienta de

debugging
Código fuente

(ej1.pro)
Listener
(Consola)
Para debugging y

corrección de

programas
2
Ia 2004 7
Ejemplo 1
member(X, [X|Xs]).
member(X, [Y|Ys]):- member(X,Ys).
length([ ],0).
length([X|Xs], N):- length(Xs, Ns),

N is Ns+1.
Ia 2004 8
Debugger
Ia 2004 9
+ Debugging
• Predicados para debugging
– buginit/1 – buginit/0 – abre un archivo donde

volcar información de debugging.

– bug/1 - ?/1: para trazar una meta

– bugclose/0 – cierra el archivo de debugging.

– ...
• Predicados para logging
– Openlog/1, writelog/1, nllog/0
– ...
Ia 2004 10
*.PRO

VS

*.PLM
• ?- consult (ej1).

(ej1.pro: código fuente)
• ?- reconsult.
• ?- consult(ej1).
...
?- consult(ej1).
% OJO!
• ?- load(ej2). (ej2.plm: código compilado)
Ia 2004 11
Interpretado VS Compilado
Debugger

NO Debugger

SI
?- load (archivoPLM) ?- consult (archivoPRO)
Modificación dinámica de

código con restricciones
Modificación dinámica de

código
Ejecución + rápida
Ejecución + lenta
Código compilado es

estático
Se interpretan

(dinámicamente)
*.plm código compilado *.pro

código fuente
Ia 2004 12
Proyectos (1)
Los proyectos proporcionan una forma

fácil de organizar el desarrollo de

aplicaciones que están compuestas

por varios archivos y/o librerías
3
13
Proyectos (2)
Archivo XPL: módulo resultante de

ensamblar todos los archivos que

componen el proyecto
Directorio del proyecto
Archivos del proyecto: todos los

archivos *.pro (o *.plm) que contienen

en su conjunto todo el código del

programa
Archivos incluidos: lista de

archivos *.plm que deben incluirse en

el proyecto
Ia 2004 14
Distribución
• MiProyecto.xpl
• amzi.dll
• MiProyecto.exe:

– una copia renombrada de arun.exe
Cuando Prolog está embebido en otras

aplicaciones el *.exe no es necesario
Ia 2004 15
Módulos
• Un módulo es una colección nombrada

de predicados.

• Un módulo puede importar predicados

de otros módulos

• Un módulo puede exportar predicados

para que sean usados por otros módulos.
Ia 2004 16
Módulos (2)
• Módulo: User
– Por default todos los predicados están

definidos en un módulo llamado 'user'
– Todos los predicados en el módulo 'user'

son visibles para cualquier otro módulo
• Módulo: System
– Todos los predicados pre-definidos están

en el módulo especial que es visible por

todos los otros módulos
Ia 2004 17
Módulos (3)
:- module(M1).
:- export( [ p/0, q/1] ).
:- import( M2 ).
p:- r, w.
q(X):- t(X), u(X).
q(X):- t(Y).
r:- q(X), s(X).
:- end_module(M1).
Ia 2004 18
¿ append ?
?- append ( [a,b,c], [1,2,3], L ).
no
append/3 está definido en list.plm
Hay que importar el predicado o el módulo entero
?- load ( list ), import( list ).
yes
?- append ( [a,b,c], [1,2,3], L ).
L = [a, b, c, 1, 2, 3]


4
Ia 2004 19
Tipos de predicados
• Dinámicos:

– sus cláusulas pueden agregarse o eliminarse

dinámicamente
• Estáticos:

– son los predicados compilados
• Pueden coexistir predicados dinámicos y

estáticos, pero...
• Un mismo predicado no puede ser

estático y dinámico a la vez
Ia 2004 20
Directiva dynamic
• ?- consult(arch1)
– Todos los predicados definidos en arch1.pro

son dinámicos
• ?- load(arch2)
– Un predicado definido en un arch2.plm
puede ser dinámico si se usa la directiva

:- dynamic functor/aridad
Inteligencia Artificial
2º cuatrimestre 2004
Proyectos del cursado
Ia 2004 22
Proyectos
– Funcionamiento de los programas

implementados
• Anda o no anda para casos generales, especiales

– Diseño, implementación, codificación
• Originalidad, claridad, correctitud,

documentación de código ...
– Informe
• Estructura, contenido, completitud, utilidad ...
En general serán proyectos de programación
Se evaluará en cada caso:
Ia 2004 23
Funcionamiento de los programas
- funcionamiento
- las convenciones de representación y denominaciones
- la facilidad de uso y testeo
Se considerará en la evaluación:
- el cumplimiento de los objetivos propuestos en

cada proyecto
Ia 2004 24
Diseño - Implementación
- la calidad y claridad del diseño realizado (cómo

se diseña la solución adoptada, ED’s, etc…)
- la calidad y claridad de la implementación (cómo se

implementa el diseño realizado, etc…)

Para que tales puntos puedan ser evaluados,

deberán ser documentados en forma adecuada
(ver obs. sobre informe y documentación de

código)
Se considerará en la evaluación:
5
Ia 2004 25
Informe (1)
Puede organizarse de muchas maneras pero

debe tener alguna estructura u organización

interna que favorezca la lectura y el

entendimiento de aquello que se quiere

expresar.

Algunas características de un buen informe:
- Buena presentación/organización/prolijidad
- Completitud / Utilidad

- Buena redacción / O R T O G R A F Í A
- Claridad en la expresión de conceptos
Ia 2004 26

Título

Introducción

Planteo del problema

Análisis / diseño / elección de soluciones

Análisis/explicación de la solución implementada

Convenciones adoptadas

Restricciones de representación/uso

Conclusiones /Observaciones finales

Instrucciones/ejemplos de uso
Algunos elementos de un informe:
Informe (2)
Documentación del código

(1)
% obtenerAncenstros(+N,-LA): dado N,

obtiene en

% LA la lista de ancestros de N
obtenerAncenstro(+N,-LA):- ...
obtenerAncenstro(+N,-LA):- ...
- El comentario NO DICE NADA que no pueda inferirse

desde el
nombre del predicado y sus argumentos
- Ese solo comentario no alcanza.
- Sin ninguna otra aclaración el comentario NO SIRVE.
- La única forma de entender el predicado es

leer/entender/adivinar/probar su “implementación” Ia 2004 28
Documentación del código

(2)
La documentación debe ayudar a ...
... entender el significado pretendido de cada

parte del programa
... entender cómo se implementa cada parte de la

solución propuesta
... entender

el funcionamiento y a encontrar posibles

causas de errores.
... mantener/modificar/extender de la

implementación realizada
Ia 2004 29
errores y ERRORES!!!
Un pequeño error puede causar que un

programa no funcione
Un código BIEN documentado, junto con un informe

COMPLETO pueden evidenciar si el mal

funcionamiento de un programa es causa de pequeños

errores.
En un código MAL documentado cualquier error

es simplemente un error cuya causa se

desconoce pero cuya consecuencia es clara:

EL PROGRAMA NO FUNCIONA !!!

:(lo siento)
Ia 2004 30
Quien corrige el proyecto ...
... no participó en su desarrollo
... no tiene por qué saber todos los detalles
... no puede adivinar lo que no se dice
... no tiene por qué modificar el código fuente

para poder probar el programa
CONSEJO: ponerse en lugar de quien corrige el proyecto
... etc.