Tracks
/
Common Lisp
Common Lisp
/
Temario
/
Valores múltiples
Va

Valores múltiples en Common Lisp

3 ejercicios

Acerca de Valores múltiples

En Common Lisp, una función no solo puede devolver un valor, sino que puede devolver múltiples valores. Por ejemplo, floor, que redondea hacia abajo en dirección al cero, devuelve dos valores: el primero es el valor redondeado y el segundo es el residuo.

(floor 3.5) ; => 3
            ;    0.5

(Mostraremos los múltiples valores devueltos en líneas separadas de la salida.)

Devolver múltiples valores

Si quieres que una función devuelva múltiples valores, usas el accesor values:

(defun three-numbers () (values 1 2 3))
(three-numbers) ; => 1
                ;    2
                ;    3

Si tienes una lista de valores que quieres devolver, puedes usar value-list:

(values-list '(a b c)) ; => a
                       ;    b
                       ;    c

Manejo de múltiples valores

Si solo te interesa el primer valor, no necesitas hacer nada especial: el lenguaje se encarga.

(+ (values 1 2 3) (values 10 20 30)) ; => 11

Sin embargo, si quieres acceder a esos otros valores, hay varias funciones que necesitarás usar.

Las dos macros principales son multiple-value-list y multiple-value-bind. Se usan para envolver algo que devuelva múltiples valores y capturar todos esos valores. La primera crea una lista con todos los valores. La segunda te permite vincular variables a cada uno de los valores.

(multiple-value-list (values 1 2 3))                   ; => (1 2 3)
(multiple-value-bind (a b c) (values 1 2 3) 
   (+ a b c)) ; => 6

Ten en cuenta que las variables a, b y c solo existen dentro del ámbito de multiple-values-bind.

Otra macro útil es nth-value. Es como nth para las listas: devuelve el elemento «n-ésimo» de un conjunto de valores múltiples:

(nth-value 0 (values 1 2 3 )) ; => 1
(nth-value 1 (values 1 2 3 )) ; => 2
(nth-value 2 (values 1 2 3 )) ; => 3
Editar en GitHub El enlace se abre en una ventana o pestaña nueva

Aprende Valores múltiples

La práctica está bloqueada

Desbloquea 1 ejercicio más para practicar Valores múltiples