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 varios valores. Por ejemplo, floor, que redondea hacia abajo en dirección a cero, devuelve dos valores: el primero es el valor redondeado y el segundo es el residuo.

(floor 3.5) ; => 3
            ;    0.5

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

Devolver varios valores

Si quieres que una función devuelva varios 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

Manejar varios valores

Si solo te interesa el primer valor, no hace falta hacer nada especial; el lenguaje se encarga de ello:

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

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

Hay dos macros principales: multiple-value-list y multiple-value-bind. Se usan para envolver algo que devuelve varios valores y capturar todos los 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 tienen scope dentro de multiple-values-bind.

Otra macro útil es nth-value. Se parece a nth para listas en que devuelve el elemento ené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 nueva ventana o pestaña

Aprende Valores múltiples

La práctica está bloqueada

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