Accessor VALUES
values
&rest object => object*
(setf
(values
&rest place) new-values)
object - オブジェクト
place - place
new-value - オブジェクト
values
は多値としてobjectを返却します。
setf
のvalues
は、 new-valuesの多値をplace
に格納するときに使います。 5.1.2.3. place
としてのVALUESフォームをご確認ください。
values) => <no values>
(values 1) => 1
(values 1 2) => 1, 2
(values 1 2 3) => 1, 2, 3
(values (values 1 2 3) 4 5) => 1, 4, 5
(defun polar (x y)
(values (sqrt (+ (* x x) (* y y))) (atan y x))) => POLAR
(multiple-value-bind (r theta) (polar 3.0 4.0)
(vector r theta))
(=> #(5.0 0.927295)
よく関数の返却値を正確にひとつだけと 明に示したいことがあるかもしれません。 例えば、次の関数はfloor
が2つの値を返却するので、 関数の返却値も2つです。
defun foo (x y)
(floor (+ x y) y)) => FOO (
これは2番目の返却値が意味をなさないときもあるかもしれませんし、 あるいは効率という理由で2番目の値を算出してほしくないときもあると思います。 values
は、返却値がただひとつだけであることを示す標準的な記載方法です。
defun foo (x y)
(values (floor (+ x y) y))) => FOO (
これは、values
がどんな関数呼び出しでも、 どんな引数が複数の値を返却しても、 最初以外の全ては切り捨てられて各引数の値を正確にひとつ返却するので、 うまく動作します。
なし。
なし。
values-list
, multiple-value-bind
, multiple-values-limit
, 3.1. 評価
values
は関数であり、マクロや特殊フォームでもないので、 その引数のフォームはただ主値のみ引数として受け取ります。