martes, octubre 30, 2007

Lisp. 1ª lección

Lo primero la descarga del interprete.

Lo mejor es descargar una implementación del ANSI Common Lisp. En el siguiente enlace podremos seleccionar un ejecutable adecuado para nuestro Sistema Operativo:

http://clisp.cons.org/ Seleccionar SourceForge download.

La versión de Clisp que me he bajado es la 2.42. Ocupa algo menos que 8 Mbytes.

Descomprimimos el contenido y ejecutamos clisp.exe

El interprete nos contestará con el prompt:

>

Ahora un poquito de teoría:

Tipos de datos en Lisp:

Átomos: símbolos y números. Por ejemplo: 5, 6, a, persona, aula_5

Listas. Por ejemplo: (5 a 7 5)


Como separadores se permiten el espacio y el tabulador.

Las expresiones Lisp se evalúan en el momento y se devuelven un resultado.

Los números se evalúan a si mismo.

Por lo tanto >5 devuelve 5.

Las funciones son de 2 tipos: primitivas de Lisp o las definidas por el usuario.

La notación siempre es prefijo. Primero se indica la función y luego se pasan los argumentos.

(funcion arg1 arg2)


Evalación en Lisp:

Cuando Lisp detecta un paréntesis izquierdo espera encontrar un nombre de función. Si no es así devuelve un error.

>(+ 500 300)

Devuelve 800.

(* 3 4)

Devuelve 12.

Variables:

Setf es una función primitiva especial.

>(setf simbolo expresion)


Si no hay error se asigna el valor de la expresión al símbolo.

Además Lisp devuelve el valor de la expresión.


>(setf a 5)

Devuelve 5.

Setf permite múltiples parejas:

>(setf var1 8

var2 15

var3 5000)

En un caso así devuelve el último valor: 5000.

Evaluación de variables:

>Var2

Devuelve 15.

Quote es otra función especial.

Consigue que las expresiones no se evalúen.

(quote expresion)

(quote Carlos)

Devuelve Carlos pero sin evaluar.

>(setf var1 (quote a))

Devuelve a.

> var1

Devuelve a.


FUNCIONES DE SELECCIÓN


(first lista)

Devuelve el primer elemento de la lista.


(rest lista)

Devuelve la lista quitándole el primer elemento.


(nth entero lista)

Selecciona el elemento de la lista especificado por el número.

(nth 1 (quote (a (b c) d e )))

Devuelve (b c)

(nthcdr entero lista)

Devuelve la lista que queda al eliminar por delante tantos elementos como indica el entero.

(last lista)

Devuelve la lista que contiene al último elemento.

(butlast lista)

Coge toda la lista menos el último elemento.

En lugar de quote se puede sustituir por el carácter reservado comilla: ‘.

(quote xxxx) equivale a ‘xxxx

Bueno, ya está bien por hoy.
Mañana la segunda lección y el planteamiento del primer problema típico de la asignatura "Inteligencia Artificial".

lunes, octubre 29, 2007

Lisp

Lisp fue el segundo lenguaje de alto nivel creado. El primer compilador lo desarrolló John Backus y fue de Forfran. En 1958 John McCarthy propone Lisp en el ámbito de la inteligencia artificial.

Debido a la antiguedad y las características "especiales" del lenguaje no es de extrañar que lenguajes más modernos recojan algunas características.

Los "arrays asociativos" de Perl por ejemplo recuerdan técnicas muy comunes en Lisp.

Lisp viene de List processing (procesamiento de listas) y es una expresión muy acertada. Todo en lisp son listas. Los programas son listas y los datos son listas.

Esta circunstancia hace que sea muy sencillo hacer un programa lisp cuyo resultado sea un programa generado en tiempo real en base a los datos de entrada. También es sencillo modificar o ampliar el lenguaje. Símplemente hay que crear nuevas listas para ello.

En general se suele decir que Lisp es un lenguaje de programación programable.

Durante la carrera tuve que aprender Lisp y recuerdo que me gustaba mucho. Con este post comienzo un mini curso de Lisp basándome en los apuntes de aquellos años.

miércoles, octubre 24, 2007

Si alguien leyó la nota de ayer puede que se preguntara que es eso de “CGI”.
Perl nació como herramienta para la administración de sistemas. Por ello era interpretado en lugar de compilado.

Al ser interpretado resultó más sencillo también hacerlo multiplataforma. Otra característica innata de Perl fue la rapidez de proceso.

Todo ello hizo que Perl fuera en aquella época el lenguaje perfecto para programación CGI.

CGI (Common Gateway Interface) realmente es un interfaz estándar (común) para la comunicación entre el servidor Web y programas pasarela.

Para entenderlo mejor imaginemos que tenemos un servidor Web Windows con IIS. Elegimos el lenguaje de programación que más nos guste (Perl, Pascal, C++, etc.).

Una persona se conecta al servidor por medio de un navegador. Para ello utiliza el protocolo http.

El estándar CGI determina como va a proporcionar el servidor web a nuestro programa los datos. Básicamente se utiliza la entrada estándar y las variables de entorno.

Por otra parte, nuestro programita CGI se ejecuta y por ejemplo accede a una base de datos.

Puede que quiera devolver esos datos a la persona que se ha conectado al servidor.

Según el estándar CGI, el programa tendrá que utilizar la salida estándar y devolver los datos en formato MIME. O sea, que el programa tendrá que construir la página web que quiere devolver junto con los datos que ha obtenido.

CGI permitió subir un peldaño más en la evolución de Internet.

Lo que antes eran páginas estáticas mayormente informativas se transformaron en páginas dinámicas con unas posibilidades de interacción desconocidas hasta el momento.

martes, octubre 23, 2007

Breve historia de Perl

La visión del creador de Perl:





Aprovecho que mi última entrada fue sobre Perl para hacer una recapitulación de este simpático lenguaje que en unos días cumplirá sus 20 años.

En 1987 un programador/administrador Unisys llamado Larry Wall anuncia la versión 1.0 de Perl. Esto ocurre el 18-12-1987. En un principio el lenguaje se enfoca a la administración de sistemas por lo que tiene que ser a la fuerza interpretado.

Sin embargo será en 1991 cuando junto con la publicación del famoso “libro del dromedario” se difundirá la versión 4 de Perl. Realmente no hay diferencias entre Perl 3 y Perl4. Simplemente a la versión del Perl publicada en el libro se le pasó a llamar Perl4.

Para tener un poco de perspectiva es necesario recordad que es en este año cuando el Finlandés Linus Benedict Torvalds anuncia la primera versión de Linux.

La siguiente versión, y en definitiva, la más utilizada en la actualidad fue Perl 5. Esta versión contenía grandes novedades para un lenguaje como Perl, como la orientación a objetos y los módulos. En cuanto a la fecha hay cierta confusión, ya que aunque la versión 5.0.0.0 se publica el 17-10-1994 otros se han quedado con la versión 5.0.0.1 del 13-03-1995.

El 26-10-1995 se crea CPAN, el repositorio distribuido donde podemos encontrar millones de fuentes, documentación y módulos en Perl.

Yo conocí Perl en 1997 en un Master de especialización en Internet. En aquella época era muy utilizado en el mundo Web como lenguaje de programación para utilizar en CGI-s (Common Gateway Interface o Interfaz común de pasarela).

Para localizar todas las fechas de versiones de Perl: http://search.cpan.org/dist/perl/pod/perlhist.pod