Accessor VALUES

UP


Accessor VALUES

Accessor VALUES

構文

values &rest object => object*
(setf (values &rest place) new-values)

引数と戻り値

object - オブジェクト
place - place
new-value - オブジェクト

定義

valuesは多値としてobjectを返却します。

setfvaluesは、 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は関数であり、マクロや特殊フォームでもないので、 その引数のフォームはただ主値のみ引数として受け取ります。


TOP, Github