Function TYPEP
typep
object type-specifier &optional
environment => generalized-boolean
object - オブジェクト
type-specifier - 型指定子ですが、 values
と 最初の要素がfunction
かvalues
の リストは除きます。
environment - 環境オブジェクト。 デフォルトはnil
であり、 これはnull
のレキシカルな環境の現在のグローバルな環境を示します。
generalized-boolean - generalized-boolean
もしobjectがtype-specifierによって指定された型のときはtrueを、 それ以外はfalseを返却します。
type-specifierが(satisfies fn)
フォームのときは、 関数fn
をobjectで適用することで返却します。
式(typep object '(array type-specifier))
の type-specifierが*
ではないときは、 objectがmake-array
関数の :element-type
の引数にtype-specifierが指定されて 生成された配列であるときにtrueを返却します。 (array *)
は要素の型に関係せず全ての配列を意味し、 (array type-specifier)
はただmake-array
関数の :element-type
の引数にtype-specifierが指定されて 生成された配列のみを意味します。 似たような解釈として、 (simple-array type-specifier)
と(vector type-specifier)
にも 適用されます。 詳しくは15.1.2.1. 配列のアップグレードをご確認ください。
式(typep object '(complex type-specifier)
は、 complex
関数に type-specifier型の数を与えた返却値による複素数か、 加えて同じspecialized
の表現の数を持った 複素数のときにtrueを返却します。 そのような複素数は、実部と虚部の両方で次の式が満たされなければなりません。
typep realpart 'type-specifier)
(typep imagpart 'type-specifier) (
upgraded-complex-part-type
関数をご確認ください。
typep 12 'integer) => true
(typep (1+ most-positive-fixnum) 'fixnum) => false
(typep nil t) => true
(typep nil nil) => false
(typep 1 '(mod 2)) => true
(typep #c(1 1) '(complex (eql 1))) => true (
次の例を理解するには12.1.5.3. rational
型の複素数の標準的な表現のルールを参照してください。
typep #c(0 0) '(complex (eql 0))) => false (
Ax
とAy
の2つの型指定子は違う型ですが、
upgraded-array-element-type 'Ax) (
と
upgraded-array-element-type 'Ay) (
はどちらも同じ型を示しているものとします。 このとき、下記のようになることに注意してください。
typep (make-array 0 :element-type 'Ax) '(array Ax)) => true
(typep (make-array 0 :element-type 'Ay) '(array Ay)) => true
(typep (make-array 0 :element-type 'Ax) '(array Ay)) => true
(typep (make-array 0 :element-type 'Ay) '(array Ax)) => true (
なし。
もしtype-specifierがvalues
か、 あるいは最初の要素がfunction
か values
のリストのときは、 型error
のエラーが発生します。
type-specifierが型指定子ではないときの結果は未定義です。
type-of
, upgraded-array-element-type
, upgraded-complex-part-type
, 4.2.3. 型指定子
実装は、(typep x (the class y))
のような式の場合は、 実行時にdeftype
による展開の実行が必要無いように 最適化を行うよう推奨されます。