Está en la página 1de 8

1

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:

 Un compilador: Transforma el código fuente en código de byte. A diferencia de Java,


no existe un Standard al respecto. Por eso, el código de byte generado por un entorno
de desarrollo no tiene por qué funcionar en el intérprete de otro entorno.
 Un intérprete: Ejecuta el código de byte. Un shell o top-level. Se trata de una utilidad
que permite probar los programas, depurarlos, etc. Su funcionamiento es similar a los
interfaces de línea de comando de los sistemas operativos.
 Una biblioteca de utilidades: Estas bibliotecas son, en general, muy amplias. Muchos
entornos incluyen (afortunadamente) unas bibliotecas standard-ISO que permiten
funcionalidades básicas como manipular cadenas, entrada/salida, etc.

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:

 Sintaxis de patrones (n+k). Con lo cual, la siguiente definición de la función factorial no


es válida en Haskell 2010 y posteriores: fact (n+1) = (n+1) * fact n .
Las características más interesantes de Haskell incluyen el soporte para tipos de datos y
funciones recursivas, listas, tuplas, guardas y encaje de patrones. La combinación de las
mismas pueden resultar en algunas funciones casi triviales cuya versión en lenguajes
imperativos pueden llegar a resultar extremadamente tediosas de programar. Haskell es,
desde 2002, uno de los lenguajes funcionales sobre los que más se ha investigado. Se han
desarrollado muchas variantes:

 Versiones paralelas del MIT y Glasgow, ambas denominadas Parallel Haskell.


 Más versiones paralelas y distribuidas de Haskell llamadas Distributed Haskell
(anteriormente Goffin) y Eden.
 Una versión con ejecución especulativa: Eager Haskell.
 Varias versiones orientadas a objetos: Haskell++, O'Haskell y Mondrian.
 Una versión educativa llamada Gofer desarrollada por Mark Jones que fue suplantada
por Hugs (ver abajo).

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

permite deriver instancias para un tipo después de haber compilado el módulo


orginal. Adicionalmente, es posible producir funciones utilitarias simples a partir de
un tipo.
Strafunski
Strafunski es un paquete de Haskell que provee soporte para programación
genérica en Haskell, basado en el concepto de estrategia funcional. Consiste en una
librería de combinadores (StrategyLib) y un precompilador (DrIFT-Strafunski).
Zeroth
Un programa que use Template Haskell debe enlazar con la librería TH incluso si no
contiene referencias a la misma luego de ser compilado. Zeroth es un preprocesador
que permite a los módulos usar TH sin enlazar con la librería TH. Para lograr esto,
Zeroth evalúa los splices (TODO: ¿traducción?) de nivel superior de un módulo y
guarda el código resultante.
SISTEMAS DE COMPILACIÓN
Cabal
Cabal (Common Architecture for Building Applications and Libraries) es una API
distribuida con GHC, NHC98 y Hugs que permite a un desarrollador agrupar
fácilmente un conjunto de módulos para producir un paquete. Es el sistema de
compilación estándar para las aplicaciones y librerías de Haskell nuevas.
hmake, un reemplazo de make con soporte para Haskell
Automáticamente rastrea dependencias de módulos (no hay necesidad de escribir
Makefiles). Se puede usar con cualquiera de los compiladores de Haskell usuales
(ghc, hbc, nhc98).
Tags
HaskTags
Hasktags es un programa simple que genera archivos TAGS para código Haskell.
Junto con un editor que los soporte (por ejemplo NEdit, XEmacs o Vim), los archivos
TAGS permiten encontrar rápidamente el lugar donde las funciones, constructores de
datos, etc. están definidos.
tagsh
Una versión del programa tags para Haskell. Usa las librerías hssource
estandarizada y posix, y funciona con GHC 5.02.1. Se ha probado que funciona
para vim y nedit.
Transformación de programas
HaRe -- The Haskell Refactorer
Refactoring mecánico de código Haskell (sobrepasa fronteras de módulos). HaRe
ahora soporta muchos refactorings, como renombrado de identificadores,
movimiento/introducción/inlining de definiciones, etc. Estos refactorings no están
limitados a sólo un módulo. HaRe se puede acceder desde tanto Vim como Emacs.
Haskell All-In-One
Esta utilidad de Haskell toma un programa implementado en múltiples módulos y lo
convierte en uno solo.
DrHylo
Herramienta para derivar hilomorfismos a partir de una sintaxis Haskell restringida.
Está basado en el algoritmo presentado en el artículo "Deriving Structural
Hylomorphisms from Recursive Definitions" en ICFP'96 por Hu, Iwasaki y Takeichi.
6

ENTORNOS DE DESARROLLO INTEGRADOS


Haskell support for Eclipse (Soporte Haskell para Eclipse)
Eclipse es una plataforma IDE abierta, extensible, para "todo y nada en particular".
Está implementado en Java y funciona en varias plataformas. El IDE Java construido
sobre él ya se ha hecho muy popular entre los desarrolladores Java. Las
herramientas de Haskell lo extienden con soporte para edición (coloreo de sintaxis,
asistencia de código), compilación y ejecución de programas Haskell desde el IDE.
Más características, como navegación de código fuente y módulos, se agregarán en
el futuro.
hIDE
hIDE es un IDE para Haskell con interfaz gráfica, escrito con gtk+hs. No incluye un
editor, sino interfases con NEdit, vim o GNU emacs.
hIDE-2
A través de la edad oscura muchos programadores soñaron con la herramienta
máxima. En respuesta a este deseo inquietante, el cual nosotros tal vez hayamos
tenido de sobra, el trío dinámico de #Haskellaniacs (dons, dcoutts y Lemmih)
anuncian, para el alivio de la comunidad, que un feto ha sido concebido: hIDE - the
Haskell Integrated Development Environment (Entorno de Desarrollo Integrado de
Haskell). Hasta ahora el no nacido integra reconocimiento de código fuente y un
editor camaleón, resintiendo estos en un animado entorno gtk2. A pesar de que
ningún vidente haya predicho la fecha de nacimiento de nuestra criatura, esperamos
que el mero conocimiento de su existencia lleve paz y tranquilidad a la comunidad
como el aceite en aguas turbias. Ver también: Capturas de HIDE y HIDE.
JCreator with Haskell support (JCreator con soporte Haskell)
JCreator es un IDE Java para Windows altamente personalizable. Las características
incluyen soporte extensivo para proyectos, barras de herramientas totalmente
personalizables (incluyendo las imágenes de herramientas definidas por el usuario)
y menús, aumentar/disminuir sangrado para un bloque de texto seleccionado
(tab/shift+tab respectivamente). El módulo de soporte Haskell agrega coloreo de
sintaxis para código Haskell y winhugs, hugs, un verificador estático (si haces doble
clic en el mensaje de error, JCreator saltará a la línea correcta del archivo correcto
y lo marcará en amarillo) y el informe Haskell 98 como herramientas. Plataformas:
Win95, Win98, WinNT y Win2000 (sólo Win95 no se ha probado todavía).
Tamaño: 6 MB. JCreator es una marca registrada de Xinox Software; Copyright ©
2000 Xinox Software. El módulo de soporte Haskell es desarrollado por Rijk-Jan
van Haaften.
Visual Haskell
Visual Haskell es un entorno de desarrollo completo para software Haskell, basado
en la plataforma Microsoft Visual Studio. Visual Haskell se integra con el editor de
Visual Studio para ofrecer características interactivas que ayudan al desarrollo en
Haskell, y permite la construcción de proyectos que consisten en múltiples módulos
Haskell, usando la infraestructura de empaquetamiento/compilación Cabal.
KDevelop
Este IDE soporta muchos lenguajes. Para Haskell actualmente soporta administración
de proyectos, coloreo de sintaxis, compilación (con GHC) y ejecución dentro del IDE.
haste - Haskell TurboEdit
haste - Haskell TurboEdit - es un IDE para el lenguaje de programación funcional
Haskell, escrito en Haskell.
7

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.

También podría gustarte