Maple Professional
Maple Academic
Maple Student Edition
Maple Personal Edition
Maple Player
Maple Player for iPad
MapleSim Professional
MapleSim Academic
Maple T.A. - Testing & Assessment
Maple T.A. MAA Placement Test Suite
Möbius - Online Courseware
Machine Design / Industrial Automation
Aerospace
Vehicle Engineering
Robotics
Power Industries
System Simulation and Analysis
Model development for HIL
Plant Modeling for Control Design
Robotics/Motion Control/Mechatronics
Other Application Areas
Mathematics Education
Engineering Education
High Schools & Two-Year Colleges
Testing & Assessment
Students
Financial Modeling
Operations Research
High Performance Computing
Physics
Live Webinars
Recorded Webinars
Upcoming Events
MaplePrimes
Maplesoft Blog
Maplesoft Membership
Maple Ambassador Program
MapleCloud
Technical Whitepapers
E-Mail Newsletters
Maple Books
Math Matters
Application Center
MapleSim Model Gallery
User Case Studies
Exploring Engineering Fundamentals
Teaching Concepts with Maple
Maplesoft Welcome Center
Teacher Resource Center
Student Help Center
type - 型チェック関数
使い方
type(e, t)
パラメータ
e
-
式
t
任意の有効な型表現
説明
多くの場合、式の正確な値を知る必要はありません。式が、ある共通の性質を共有する広範なクラス、グループ、式に属することがわかれば十分です。これらのクラスまたはグループは型として知られています。T が型を表すとすると、T の表すクラスに属するとき、式は型 T を持つと言います。たとえば、式が型名 posint (正の整数の集合) に属するとき、式は型 posint を持つと言います。
多くの Maple プロシージャはアルゴリズムの制御の流れを管理したり、式が有効な入力であるかを判定するために型を利用します。たとえば、非可換な積演算子 `.` は、その引数の型に応じて引数をどう扱うかを決定します。
多くの型 (クラス) には integer、numeric、list、radalgnum のような名前があります。他の型はより複雑な「型表現」を作ることにより記述されます。これは文法によってもっと原始的な型の表現から作られます (文法は有効な組合せの規則の集まりです。type/structure を参照)。有効な型を表す式のクラスはそれ自身 type と呼ばれる型で表されます(すなわち、type(T, type) は が有効な表現のときに限り true を返します。特にtype(type, type) は true を返します)。
型は、list や table のように基本的なデータ構造が共通の式を表すのに用いることができます。あるいは prime のように数学的性質を表すのに用いることもできます。
コマンド type(e, t) により Maple 式が与えられた型を持つかどうかをテストすることができます。コール type(e, t) は 式 e が型 t を持てば true を返し、そうでなければ false を返します。
注意: type コマンドは仮定をチェックせず、オブジェクトのみ考慮します。もし、assume を使用しているのであれば、is コマンドを使用することをお勧めします。
type には 2 つの引数が渡されなければなりません。最初の引数は任意の Maple 式です。2 つ目の引数は有効な型表現でなければなりません。型表現は、type が「知っている」名前と同じくらい単純な場合もあれば、複雑な「構造化された型」の場合もあります (type/structure を参照)。平板な表現では、1 つの引数のみが type のコールで指定された場合、最初の引数が NULL であると推定します。
2 番目の引数 t が有効な型でない場合に限り例外が発生します。
特定の状況では、 の形式の式を使用して型のテストを実行することもできます。(if 文で式をテストするときのように) ブール代数のコンテクストにおいて評価するとき、 は が型 を持つとき true に評価され、そうでないとき false に評価されます。これは主にプロシージャに渡す引数の型を自動的にチェックするために用いられます。詳細は、typematch を参照してください。
型 (または型表現) はそれらが Maple で定義されている方法により類別することができます。
最も単純な型は surface 型 です。これらは一般に Maple のカーネルで定義されており、式の表面的な、あるいは「トップレベルの」性質を表しています。たとえば、型 list は surface 型です。surface 型に対するテストはとても高速です。surface 型のテストは、テストする式のサイズによらず、一定時間に終了することができます。詳細は、type/surface を参照してください。
より単純で原始的な型を組み合わせていくらでも複雑な「構造化された型」を作ることができます。これにより深い構造に基づいて式を分類することができます。たとえば、型表現 はその要素が正の整数であるようなリストのクラスを表します。この型に対するテストは、テストする式のトップレベルのデータ型 (list) だけでなく、正しい型 (posint) を持つかどうかを判定するリストの要素のそれぞれを調べる必要があります。式を構造化された型に対してテストするためには、完全に再帰的に横切る式の評価が必要かもしれず、構造化された型テストに必要な時間は式のサイズに応じて増えることがあります。構造化された型表現に関する詳細は、type/structure を参照してください。
定義された型 とは、名前が付けられている型で、あらゆる計算を行うことができます。T と名付けられた型はグローバル名 `type/T` に構造化された型表現またはプロシージャを割り当てることにより定義されます。定義された型のパフォーマンスに対する大体の目安はありません。それらは大変単純にもいくらでも複雑にもなり得るからです。型の定義に関する詳細は、type/definition を参照してください。
surface 型と構造化された型に加えて、以下の型名が Maple で定義されています。
!
*
+
.
::
<
<=
<>
=
@
@@
^
abstract_rootof
algebraic
algext
algfun
algnum
algnumext
And
and
anyfunc
anyindex
anything
appliable
applied
arctrig
arctrigh
Array
array
assignable
atomic
attributed
boolean
BooleanOpt
builtin
cache
character
ClosedIdeal
CommAlgebra
complex
complexcons
composition
const
constant
copyrighted
cubic
cx_infinity
cx_zero
dependent
dictionary
dimension
disjcyc
embedded_axis
embedded_imaginary
embedded_real
equation
even
evenfunc
expanded
extended_numeric
extended_rational
facint
filedesc
filename
finite
float
float[8]
float[]
form
fraction
freeof
function
global
hfarray
hfloat
identical
imaginary
implies
in
indexable
indexed
indexedfun
infinity
integer
intersect
last_name_eval
laurent
linear
list
listlist
literal
local
logical
mathfunc
matrix
Matrix
minus
module
moduledefinition
monomial
MonomialOrder
MVIndex
name
neg_infinity
negative
negint
negzero
Non
nonemptylist
nonemptyset
nonnegative
NONNEGATIVE
nonnegint
nonposint
nonpositive
nonreal
Not
not
nothing
numeric
odd
oddfunc
operator
Or
or
OreAlgebra
package
partition
patfunc
patindex
patlist
permlist
piecewise
point
Point
polynom
pos_infinity
posint
positive
poszero
prime
procedure
property
protected
quadratic
quartic
Queue
radalgfun
radalgnum
radext
radfun
radfunext
radical
radnum
radnumext
Range
range
rational
ratpoly
ratseq
real_infinity
realcons
record
relation
RootOf
rtable
satisfies
scalar
SDMPolynom
sequential
series
SERIES
set
sfloat
ShortMonomialOrder
SkewAlgebra
SkewParamAlgebra
SkewPolynomial
specfunc
specified_rootof
specindex
sqrt
Stack
stack
std
stdlib
string
subset
suffixed
symbol
SymbolicInfinity
symmfunc
table
tabular
taylor
TEXT
trig
trigh
truefalse
type
typefunc
typeindex
undefined
uneval
union
unit
unit_name
Vector
vector
verification
with_unit
xor
zppoly
||
注意:
型名が演算子またはキーワードの場合、文法エラーを回避するためにバッククォートで囲む必要があります。以下の例を参照してください。
型の中には特定のパッケージの読み込み後にのみアクティブになるものがあります。たとえば、type/const は difforms パッケージが読み込まれた後にのみアクティブです。
Maple の type システムに任意の属性を埋め込み、上記リストを拡張するためには、type/satisfies を参照してください。特定の型に関する詳細は、type/datatype を参照してください。ここで、datatype は上記リストの名前のいずれかです。
type コマンドに渡される引数は通常、他の Maple コマンドに対するのと同様に評価されます。対話型での使用ではあまり必要ありませんが、ロバストな Maple プログラムにするには、型表現で使用される名前を未評価のクォート (') で囲み、評価されないようにする必要があります。たとえば、名前 T に値 が割り当てられており、型名としても用いられている場合、type(e, 'T') は正しく動作しますが、type(e, T) は失敗する可能性があります (この場合、 は有効な型表現なので、失敗してもメッセージは出力されません)。以下の例を参照してください。
Maple では、型表現は最上級の式です。型はプロシージャの引数として渡されプロシージャから返すことができ、データ構造に記憶しておくことができます。複雑な型表現をその他の Maple 式を扱うように操作することができます。実際は、型表現は通常の Maple の式です。これらの式が型として認識されるのは一部の状況においてだけです(しかし、すべての式が有効な型であるわけではありません)。
注意: Maple には という型はありません。しかし、whattype は式列であるオブジェクトに対して を返します(type( o, exprseq ) が true を返す Maple オブジェクト はありません。実際、式列は平板化されているので、式列を最初の引数とするような type のコールを構成することはできません)。
ユーザは次のようにして型関数にデータ型を知らせることができます。ユーザがプロシージャ `type/mytype` を定義しているとすると、type(a, mytype(b, c, ...)) の型のコールは、関数コール `type/mytype`(a, b, c,...) を評価します。
type 以外の Maple コマンドのいくつかは型表現とともに動作するように設計されています。たとえば、hastype、anames、indets を参照してください。select のような別のコマンドは、より一般的な属性ともうまく働くように設計されていますが、type コマンドともうまく動作します。
例
type( 6.777800, 'float');
type( 6.777800, 'rational');
whattype( solve( 3*x +5=14,x));
type( sin(x), 'trig');
type( a + b, 'polynom' );
シンボルと予約名については、クォートを使用します。
type( a + b, `+` );
type( a * b, '`+`' );
type( a and b, '`and`' );
type( module() export e; end, '`module`' );
a,b,5;
whattype((10));
whattype( NULL );
type(NULL,exprseq);
type(exprseq,NULL);
type( [ a, b, c ], 'list' );
false negative テスト
`type/T` := 'list':
T := 2:
type( [ a, b, c ], T );
次の 2 つは正しいコマンドです。
type( [ a, b, c ], 'T' );
type( 2, 'T' );
false positive テスト
type( 2, T );
関連項目
arithop、convert、define、equation、exprseq、ExtendingMaple、factorial、function、hastype、indexed、intersect、is、minus、name、procedure、quotes、satisfies、subtype、table、TEXT、type/definition、type/structure、type/surface、type/type、TypeTools、uneval、union、whattype
Download Help Document