Documentos de Académico
Documentos de Profesional
Documentos de Cultura
T2 Bogar Guillermo Perez Santiago Programacion Logica PDF
T2 Bogar Guillermo Perez Santiago Programacion Logica PDF
PROLOG
INICIOS DEL LENGUAJE
Prolog (o PROLOG), proveniente del francés PROgrammation en LOGique,1 es un lenguaje de
programación lógico e interpretado usado habitualmente en el campo de la Inteligencia
artificial.
Se trata de un lenguaje de programación ideado a principios de los años 70 en la
Universidad de Aix-Marseille I (Marsella, Francia) por los estudiantes Alain Colmerauer y
Philippe Roussel. Nació de un proyecto que no tenía como objetivo la traducción de un
lenguaje de programación, sino la clasificación algorítmica de lenguajes naturales. Alain
Colmerauer y Robert Pasero trabajaban en la parte del procesado del lenguaje natural y
Jean Trudel y Philippe Roussel en la parte de deducción e inferencia del sistema. Interesado
por el método de resolución SL, Trudel persuadió a Robert Kowalski para que se uniera al
proyecto, dando lugar a una versión preliminar del lenguaje Prolog a finales de 19712 y
apareciendo la versión definitiva en 1972.3 Esta primera versión de Prolog fue programada
en ALGOL W.
Inicialmente se trataba de un lenguaje totalmente interpretado hasta que, en 1983, David
H.D. Warren desarrolló un compilador capaz de traducir Prolog en un conjunto de
instrucciones de una máquina abstracta denominada Warren Abstract Machine, o
abreviadamente, WAM. Desde entonces Prolog es un lenguaje semi-interpretado.
DESARROLLADORES
Las primeras versiones del lenguaje diferían, en sus diferentes implementaciones, en muchos
aspectos de sus sintaxis, empleándose mayormente como forma normalizada el dialecto
propuesto por la Universidad de Edimburgo,6 hasta que en 1995 se estableció un estándar
ISO (ISO/IEC 13211-1), llamado ISO-Prolog.
Prolog se enmarca en el paradigma de los lenguajes lógicos y declarativos, lo que lo
diferencia enormemente de otros lenguajes más populares tales como Fortran, Pascal, C o
Java.
PROPÓSITOS
A diferencia de los lenguajes de programación clásicos, que dividen un problema en
áreas y procedimientos, detallándolos paso a paso de una manera explícita mediante
instrucciones; Prolog permite describir estructuras de datos, sus relaciones y objetivos por ser
un lenguaje declarativo; y el proceso por el cual ejecuta la tarea no se establece de forma
explícita en el programa, sino que se determina por el proceso de traducción del lenguaje.
Vale decir entonces que el Lenguaje Prolog tiene una estructura de programación orientada
a dar soluciones a problemas del área de aplicación de la Inteligencia Artificial mediante
estructuras de programación orientadas a la resolución de problemas de una manera no-
clásica.
Quienes aprendimos a programar en Prolog podemos valorarlo como lenguaje
específico para la programación basada en hechos, predicados y reglas, ver sus alcances y
potencialidades, y descubrir que intentar desarrollar soluciones similares con búsquedas de
objetivos en otros lenguajes tradiciones sería muy extenso y con poca eficacia. No todos los
programadores y docentes de Informática conocen este lenguaje, ni su aplicación en
3
Inteligencia Artificial y Sistemas Inteligentes, sin embargo, Prolog, es una herramienta muy
efectiva a la hora de buscar soluciones mediante la Programación Lógica y el
aprovechamiento de elementos de otras áreas tales como la Matemática
Discret, ayudándonos a “unir los puntos”, y encontrar nuevos datos a partir de otros pre-
existentes.
Siendo la Informática una ciencia que busca brindar soluciones al problema
de procesamiento de información para la toma de decisiones, en el momento temporal de la
historia que nos toca vivir, los Sistemas Inteligentes van ganando terreno día a día en esta
Sociedad de Información, cada vez más tecnificada y dependiente, no puede faltar entonces
la incorporación de su enseñanza en escuelas de nivel Medio dentro de la currícula de las
materias: Informática, Procesamiento de Datos, Programación y/o Nuevas Tecnologías de la
Información, por eso es fundamental que todos los alumnos del Profesorado de Informática
tengan la posibilidad de conocer y trabajar los contenidos de este espacio tan rico, para el
presente y para el futuro llamado Sistemas Inteligentes.
SISTEMAS
Prolog es un lenguaje de programación seminterpretado. Su funcionamiento es muy similar a
Java. El código fuente se compila a un código de byte el cuál se interpreta en una máquina
virtual denominada Warren Abstract Machine (comúnmente denominada WAM).
Por eso, un entorno de desarrollo Prolog se compone de:
Generalmente, los entornos de desarrollo ofrecen extensiones al lenguaje como pueden ser
la programación con restricciones, concurrente, orientada a objetos, etc. Sería injusto no
mencionar aquí el entorno de desarrollo más popular: SICStus Prolog, si bien, se trata de un
entorno de desarrollo comercial (no gratuito).
SICStus, CIAO Prolog, y posiblemente otros más, ofrecen entornos integrados generalmente
basados en Emacs que resultan muy fáciles de usar. CIAO Prolog.
HOSKEL
INICIOS DEL LENGUAJE
Haskell (pronunciado /hæskəl/)1 es un lenguaje de programación estandarizado multi-
propósito, funcionalmente puro, con evaluación no estricta y memorizada, y fuerte tipificación
estática. Su nombre se debe al lógico estadounidense Haskell Curry, debido a su aportación
4
al cálculo lambda, el cual tiene gran influencia en el lenguaje. En Haskell, "una función es un
ciudadano de primera clase" del lenguaje de programación. Como lenguaje de
programación funcional, el constructor de controles primario es la función. El lenguaje tiene
sus orígenes en las observaciones de Haskell Curry y sus descendientes intelectuales.
En los años 1980 se constituyó un comité cuyo objetivo era crear un lenguaje funcional que
reuniera las características de los múltiples lenguajes funcionales de la época, el más notable
Miranda, y resolviera la confusión creada por la proliferación de los mismos.
El lenguaje evoluciona rápidamente y (ver más abajo) como los representantes actuales del
estándar de facto. El último estándar oficial es: Haskell 2010, cuyas diferencias respecto al
anterior estándar Haskell 98 son:
Nuevas características del lenguaje:
Interfaz de funciones foráneas (FFI), que permite usar código C en un programa Haskell y
código Haskell en un programa C. Un ejemplo explicativo se puede encontrar aquí
Nombres jerárquicos para los módulos, por ejemplo Data.Bool.
Guardianes con patrones.
Características eliminadas del lenguaje:
DESARROLLADORES
Una lista de herramientas que son útiles al escribir código Haskell. Ver también las
herramientas de compilador y los demostradores automáticos.
Preprocesadores
cpphs
Cpphs es una reimplementación (en Haskell) del preprocesador de C.
DrIFT
DrIFT es una herramienta que permite la derivación de instancias de clases que no
están soportadas por los compiladores estándar. Además, las instancias pueden ser
producidas en módulos distintos de los que contienen la declaración del tipo. Esto
5
Vital
Vital es un entorno de programción visual. Está particularmente pensado para
soportar el estilo abierto, incremental de desarrollo usualmente preferido por
usuarios finales (ingenieros, científicos, analistas, etc.).
Pivotal
Pivotal 0.025 es un prototipo de un entorno al estilo de Vital para Haskell. A
diferencia de Vital, Pivotal está implementado enteramente en Haskell. La
implementación está basada en el uso de la librería hs-plugins para permitir la
compilación y evaluación dinámica de expresiones de Haskell junto con la librería
gtk2hs para implementar la interfase gráfica.
MODOS DE EDITOR PARA COLOREO DE SINTAXIS
Kate
Coloreo de sintaxis para Kate (KDE)
Archivos por Ralf Hinze.
[hs.xml hs.xml] y [lhs.xml lhs.xml] por Brian Huffman.
NEdit
Soporte para coloreo de sintaxis y comentarios de bloque en NEdit.
Vim
Coloreo de sintaxis en vim
por Don Stewart: para archivos Haskell estilo TeX y cpp.
por Ian Lynagh: distingue distintos estilos de Haskell literal.
por John Williams: Soporta tanto Haskell normal ([haskell.vim .hs]) como [lhaskell.vim .lhs]
(archivos que descomentan código prefijado por >).
por Marc Weber: una ayuda para editar archivos Haskell en vim.
Textpad
Archivo de coloreo de sintaxis para textpad
por Jeroen van Wolffelaar y Arjan van IJzerdoorn, que incluye todas las funciones
del preludio, tipos de datos, constructores, etc. en grupos separados.
Emacs
Modo Haskell para Emacs
Soporta font locking, recolección de declaraciones, documentación de tipos,
indentación e interacción con Hugs. (Si usas XEmacs, puedes necesitar un parche
menor - ver Haskell mode for Emacs#Xemacs).
Modo Hugs para Emacs alternativo por Chris Van Humbeeck
Ofrece fontificación y cooperación con Hugs. Actualizado para emacs 20.* por
Adam P. Jenkins.
latex-lhs-mode.el
Escrito sobre haskell-mode (arriba), permite el uso simultáneo de literate-haskell-
mode y la mayor parte de latex-mode incluido en emacs.
Jed
Modo Haskell (This link is dead. Fix it or remove it.)
para jed por Marcin 'Qrczak' Kowalczyk.
Subethaedit
Modo Haskell para SubEthaEdit
SubEthaEdit es un editor para Mac OS X.
8
PROPOSITOS
Escribir programas grandes que funcionen correctamente es difícil y costoso. Mantener esos
programas es aún más difícil y costoso también. Los lenguajes de programación funcional,
tales como Haskell, pueden hacerlo mucho más fácil y económicos. Por ejemplo, un usuario
nuevo quién escribió una pequeña DBMS relacional en Haskell comentó lo siguiente:
WOW! Yo básicamente escribí esto sin probarlo, sólo pensando acerca de mi programa en
términos de transformaciones entre tipos. Escribí el código de ejemplos/pruebas y no tuve
casi ningún error de implementación en el código!. El compilador/sistema-de-tipos es
realmente bueno en evitar que cometas errores de código!. Yo nunca había tenido en mi
vida un bloque de código tan grande que funcionara en el primer intento. Estoy
absolutamente impresionado.
Incluso si tú no estás en una posición para usar Haskell en tus proyectos de programación,
aprender Haskell puede hacerte un mejor programador en cualquier lenguaje.
Yo aprendí Haskell un par de años atrás, habiendo previamente programado en Python y
(muchos) otros lenguajes. Recientemente he estado usando Python para un proyecto (la
elección ha sido determinada tanto por aspectos técnicos y no-técnicos), y me doy cuenta
que mi estilo de programar en Python ha sido ampliamente influenciado (para mejor,
espero ;-) por mi experiencia de programación en Haskell.
Graham Klyne
Haskell te ofrece:
Un incremento substancial de productividad para el programador (Ericsson alcanzó
un factor de mejoría entre 9 y 25 usando Erlang, un lenguaje de programación
funcional similar a Haskell, en uno de sus experimentos en programas de telefonía).
Código más corto, claro y fácil de mantener.
Menos errores, mayor confiabilidad.
Menor diferencia semántica; entre el programador y el lenguaje.
Desarrollo de programas en menor tiempo.