多値を変数に代入する - lisp-cookbook-ja/common-lisp GitHub Wiki

制御構造

多値(複数の値)を返す関数があります。 単純にletで変数に束縛しただけでは最初の値しか得られません。 多値のそれぞれを変数に束縛するにはmultiple-value-bindを使います。

(multiple-value-bind (q r)
    (truncate 11 3)
  (format t "~A ~A~%" q r))
;-> 3 2
;=> NIL

多値をリストに格納して返してくれるmultiple-value-listもあります。

setfvalues を使って代入することもできます。

(let (q r)
  (setf (values q r) (truncate 11 3))
  (format t "~A ~A~%" q r))
;-> 3 2
;=> NIL