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.





 

No hay comentarios:

Publicar un comentario