Plusieurs fonctions primitives Common Lisp renvoient déjà deux valeurs. Nous l'avons déjà vu dans la section 6.2.9 pour les fonctions floor et ceiling :
Ici, la première valeur indique le quotient de la division et la deuxième valeur indique le reste.
Dans un contexte où une seule valeur est attendue, c'est la première qui est utilisée et la deuxième est perdue :
La deuxième valeur peut être récupérée grâce à la macro multiple-value-bind. Cette macro prend comme paramètres une liste de variables destinées à contenir les valeurs, une expression renvoyant plusieurs valeurs et un corps d'expressions qui seront évaluées dans le contexte des variables :
Le programmeur Common Lisp peut écrire ses propres fonctions ayant plusieurs valeurs, grâce à l'accesseur values :
L'opérateur spécial progn permet à la dernière expression de renvoyer plusieurs valeurs, mais la macro prog1 ne renvoie que la première valeur de son premier argument. Afin de récupérer toutes les valeurs, on utilise la macro multiple-value-prog1 :
Une implémentation de Common Lisp peut limiter le nombre de valeurs multiples possibles. La variable multiple-values-limit indique cette limitation :
Même si, dans le cas CMUCL, cette valeur n'est pas très restrictive, le mécanisme de valeurs multiples n'est souvent utile que pour un nombre relativement faible de valeurs, au plus une dizaine.
Irene DURAND