% Special-Operator THE
Special Operator THE
the
value-type form => result*
value-type - 型指定子。評価されません。
form - フォーム。評価されます。
result - formを評価した結果の返却値。
これらの返却値はvalue-typeによって指定した型に一致しなければなりません。
詳細は下記を参照。
the
はformによって返却された値が
value-typeの型であることを指定します。
resultが宣言の型ではないときの結果は未定義です。
型が宣言されている値が実際にその型である限り、
formがvalue-typeで指定されている値とは
異なる数の値を生成することは許されます。
欠落している値は、その型を確認するために
nil
として扱われます。
value-typeで宣言された値の数に関係なく、
formが返す値の数は、
the
特殊フォームが返す値の数と同じになります。
(the symbol (car (list (gensym)))) => #:G9876
(the fixnum (+ 5 7)) => 12
(the (values) (truncate 3.2 2)) => 1, 1.2
(the integer (truncate 3.2 2)) => 1, 1.2
(the (values integer) (truncate 3.2 2)) => 1, 1.2
(the (values integer float) (truncate 3.2 2)) => 1, 1.2
(the (values integer float symbol) (truncate 3.2 2)) => 1, 1.2
(the (values integer float symbol t null list)
(truncate 3.2 2)) => 1, 1.2
(let ((i 100))
(declare (fixnum i))
(the fixnum (1+ i))) => 101
(let* ((x (list 'a 'b 'c))
(y 5))
(setf (the fixnum (car x)) y)
x) => (5 B C)
なし。
formが生成した返却値が指定したvalue-typeでは なかったときの結果は未定義です。
values
型指定子は、多値の型を示すのに使われます。
(the (values integer integer) (floor x y))
(the (values string t)
(gethash the-key the-string-table))
setf
は、the
の型指定子を使用できます。
この場合、宣言は新しい値を指定したフォームへ変換されます。
そのsetf
の結果が解析されます。