Translate

martes, 1 de mayo de 2012

Llamar y Definir funciones

Antes de comenzar debemos saber como entrar y salir de nuestro intérprete. Para iniciar abrimos una terminal, consola o línea de comandos (o símbolo del sistema). Escribimos el nombre de nuestro programa, por ejemplo para clisp:

> clisp

Iniciará el programa del intérprete lisp, con alguna información según el caso.
Para finalizar y devolver el control de la consola al sistema operativo, escribimos:

> (quit)

Llamadas a Funciones

Las funciones son de fundamental importancia aquí. Las llamadas a funciones tienen una estructura determinada:

(nombre argumentos)

Todas las funciones irán entre paréntesis. Las funciones pueden tener uno, varios o ningún argumento. Aquí muestro algunos ejemplos de llamadas a funciones desde el intérprete:

> (+ 2 3)
5

> (write-string "holaaa")
holaaa
"holaaa"

> (* 4 7)
28

> (* 3 4 2)
24

Para asignar valores a variables, usamos la función setf:

> (setf x 45)
45

Colocando el nombre, el interprete evalua y devuelve el valor:
> x
45

Para crear listas de objetos diversos, podemos usar la función list (veremos mas adelante sobre los distintos tipos de datos en lisp):

> (list 34 "cadena de caracteres" 3.14 2/3 (+ 6 7))
(34 "cadena de caracteres" 3.14 2/3 13)

> (setf x 23)
23
> (list 67 5.32 3/8 "octubre" (+ 2 3) x)
(67 5.32 3/8 "octubre" 5 23)

Definir funciones

En Lisp, la forma mas fácil de definir funciones es usando la macro defun. Veamos un ejemplo de creación de una función en el intérprete:

> (defun hola () (write-string "Hola mundo!"))
HOLA

Primero va el nombre de la función, en este caso hola, luego los argumentos, en este caso la función no posee ningún argumento, y por ultimo va el cuerpo de la función.
Otro ejemplo muy conocido para mostrar las definiciones de función en lisp:

> (defun cuadrado (n) (* n n))
CUADRADO

Probamos la función:

> (cuadrado 9)
81

Otro mas:

> (cuadrado 4)
16

Otro ejemplo de definición de funciones:

> (defun cubo (n) (* n n n))
CUBO

Genial! probamos la función:

> (cubo 5)
125

> (cubo 3)
27

Una vez que salimos del intérprete, las definiciones de función creadas se perderán.
¿Cómo guardamos estos datos?
Abrimos un editor de textos cualquiera o emacs con slime y escribimos en él:

(defun hola ()
   (write-string "Hola, mundo!"))

(defun cuadrado (n)
   (* n n))

(defun cubo (n)
   (* n n n))

Guardamos el archivo como "primero.lisp" o lo que sea .lisp.
Si entramos en el intérprete nuevamente, las funciones creadas no estarán cargadas en el sistema. Para cargarlas usamos la función load:

> (load "ruta.../primero.lisp")

Y las funciones creadas estarán disponibles en el intérprete. También podemos compilar el archivo .lisp antes de cargarlo, con lo cual se creará un archivo .fas o .fasl según el tipo de interprete que estemos usando. Esto se hace así:

> (compile-file "ruta.../primero.lisp")

De esta manera crea el archivo "primero.fas" en un lenguaje mas cercano a la máquina. El código se ejecutará mas rápido, esto no se notará en programas pequeños pero si en programas mas extensos. Para cargarlo usamos la función load:

> (load (ruta.../primero.fas")

PD: aquí dejo una guía rápida que encontré en algún momento navegando, hace rato ya:


domingo, 29 de abril de 2012

Entorno de Desarrollo Lisp

Bien, antes de comenzar necesitamos tener un entorno de desarrollo para lisp. Para ello debemos tener instalado un interprete de lenguaje Common Lisp. Hay varios: clisp, gclisp, allegro, LispWorks, Jabberwocky, Garnet, etc. Los archivos de programa lisp, son simples archivos de texto, razón por la cual necesitamos un editor de textos para guardar los archivos lisp (a los que le pondremos la extensión .lisp "o .lsp"), puede ser cualquiera, aunque uno muy bueno es el Emacs, que con Slime instalado genera un entorno de desarrollo lisp en modo texto muy amigable, con dentado, control de paréntesis, colores y demas cosas.
En ubuntu es muy fácil instalar todo, tanto el clisp como el Emacs con slime se encuentra en los repositorios. 


Para instalarlo en ubuntu:

sudo apt-get install emacs23

sudo apt-get install slime

 Para Windows hay que descargar el instalador de clisp desde:

En este blog hay una guía para descargar el emacs + slime para windows:


Saludos y éxitos!

PD: Aca tengo la traduccion del libro de Cooper:
Técnicas Básicas de Lisp


Inicio

Decidí crear un blog sobre lisp debido a la poca información con la que se cuenta en español sobre este lenguaje altamente adictivo. Creo que de esta manera podemos ayudarnos entre lispers a mejorar nuestros conocimientos y la propia programación. Les cuento que tengo la intención de traducir "Basic Lisp Techniques" de Cooper, "Practical common lisp" de Peter Seibel y "On Lisp" de Paul Graham. Pero voy muy despacio con eso, así que cualquier ayuda con las traducciones será bienvenida.

Bienvenidos! :)