Function TYPEP

UP


Function TYPEP

Function TYPEP

構文

typep object type-specifier &optional environment => generalized-boolean

引数と戻り値

object - オブジェクト
type-specifier - 型指定子ですが、 valuesと 最初の要素がfunctionvaluesの リストは除きます。
environment - 環境オブジェクト。 デフォルトはnilであり、 これはnullのレキシカルな環境の現在のグローバルな環境を示します。
generalized-boolean - generalized-boolean

定義

もしobjecttype-specifierによって指定された型のときはtrueを、 それ以外はfalseを返却します。

type-specifier(satisfies fn)フォームのときは、 関数fnobjectで適用することで返却します。

(typep object '(array type-specifier))type-specifier*ではないときは、 objectmake-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

AxAyの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-specifiervaluesか、 あるいは最初の要素がfunctionvaluesのリストのときは、 型errorのエラーが発生します。

type-specifierが型指定子ではないときの結果は未定義です。

参考

type-of, upgraded-array-element-type, upgraded-complex-part-type, 4.2.3. 型指定子

備考

実装は、(typep x (the class y))のような式の場合は、 実行時にdeftypeによる展開の実行が必要無いように 最適化を行うよう推奨されます。


TOP, Github