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))
(5))
(y setf (the fixnum (car x)) y)
(=> (5 B C) x)
なし。
formが生成した返却値が指定したvalue-typeでは なかったときの結果は未定義です。
values
型指定子は、多値の型を示すのに使われます。
the (values integer integer) (floor x y))
(the (values string t)
(gethash the-key the-string-table)) (
setf
は、the
の型指定子を使用できます。 この場合、宣言は新しい値を指定したフォームへ変換されます。 そのsetf
の結果が解析されます。