Translate

domingo, 26 de noviembre de 2017

Funciones (devolver valores)

Es muy sencillo, la función creada devolverá el último valor que se llama. Un ejemplo:

(defun maximo (a b)
    (if (> a b) (setf max a)
                     (setf max b))

    max)

Se puede devolver cualquier tipo de valor, según los tipos de variables que soporta el common lisp. Para utilizar el valor devuelto por la función:

(setf el-maximo (maximo 2 7)

Ahora bien, y observen la potencia del lenguaje, si quiero devolver múltiples valores, me conviene devolver una lista, que es un tipo nativo de nuestro lisp. Un ejemplo, en las ecuaciones de segundo grado hay dos raices posibles:


(defun segundo-grado (a b c)  ;ax^2 + bx + c = 0


    (setf det (- (expt b 2) (* 4 a c)))

    (setf x1 (/ (+ (- 0 b) (sqrt det))
                     (* 2 a)))
    (setf x2 (/ (- (- 0 b) (sqrt det))
                     (* 2 a)))

    (setf raices list x1 x2)
    raices)

Y devuelve una lista con dos elementos. Para usar los valores devueltos por esta función:

(setf lista (segundo-grado 1 2 3))
(setf x-1 (first lista))
(setf x-2 (second lista))
Que nos devuelve dos valores complejos para este caso.

Si una función devuelve múltiples valores en una lista, supongamos que devuelve ocho por ejemplo, debemos obtener los valores devueltos usando la función nth.





 

jueves, 23 de noviembre de 2017

Programar en lisp desde tu celular (teléfono móvil o tablet)

Ok. Esto es fácil. Deberías descargar una app intérprete. Yo estoy usando CL REPL, descargada desde el google play store.













Otra opcion que me gusta es usar ECL sobre el emulador de terminal linux sobre android TERMUX. 














Primero debes instalar el TERMUX desde el Play Store. Debes darle permiso a la app para acceder al almacenamiento del dispositivo. Se hace desde configuracion/aplicaciones seleccionas la app TERMUX, vas a Accesos y activas la casilla de Almacenamiento. Ahora abres el TERMUX e instalas el ECL con el comando:

$ pkg install ecl

Te instalará el ECL. Para ejecutarlo simplemente escribes:

$ ecl

Algo muy importante es saber donde esta la carpeta de almacenamiento: "/storage/emulated/0/". Por ejemplo, si quiero cargar un archivo hola.lisp que se encuentra en la carpeta Descargas:

> (load "/storage/emulated/0/Download/hola.lisp")

Aunque es mas facil ingresar al directorio primero y despues ejecutar el ECL y cargar el archivo:

$ cd /storage/emulated/0/Download
$ ecl
...
> (load "hola.lisp")

Ok. :-) Espero que la información te haya sido de utilidad. Comenta. Saludos.