Maple für Professional
Maple für Akademiker
Maple für Studenten
Maple Personal Edition
Maple Player
Maple Player für iPad
MapleSim für Professional
MapleSim für Akademiker
Maple T.A. - Testen & beurteilen
Maple T.A. MAA Placement Test Suite
Möbius - Online-Courseware
Machine Design / Industrial Automation
Luft- und Raumfahrt
Fahrzeugtechnik
Robotics
Energiebranche
System Simulation and Analysis
Model development for HIL
Anlagenmodelle für den Regelungsentwurf
Robotics/Motion Control/Mechatronics
Other Application Areas
Mathematikausbildung
Technik
Allgemein- und berufsbildende Schulen
Testen und beurteilen
Studierende
Finanzmodelle
Betriebsforschung
Hochleistungsrechnen
Physik
Live-Webinare
Aufgezeichnete Webinare
Geplante Veranstaltungen
MaplePrimes
Maplesoft-Blog
Maplesoft-Mitgliedschaft
Maple Ambassador Program
MapleCloud
Technische Whitepapers
E-Mail Newsletters
Maple-Bücher
Math Matters
Anwendungs-Center
MapleSim Modell-Galerie
Anwenderberichte
Exploring Engineering Fundamentals
Lehrkonzepte mit Maple
Maplesoft Welcome-Center
Resource-Center für Lehrer
Help-Center für Studierende
ビルトインルーチンの多重定義 - ビルトインルーチンの多重定義の概要
ビルトインルーチンの多重定義
オブジェクトは同名のメソッドをエクスポートすることによって変更できます。Maple コードで実装されるルーチンは変更可能です。しかし、タイプ builtin のすべてのルーチンが変更可能なわけではありません。ここでは、builtin ルーチンの変更方法を説明します。
変更可能なビルトインルーチン
次の builtin ルーチンは、オブジェクトメソッドによって変更できます。
abs
aname
conjugate
convert
diff
eval
evalhf
evalf
expand
has
hastype
Im
Re
implies
indets
length
map、map[n]、map2
max
min
member
normal
numboccur
subs
trunc
type
注意
オブジェクトが builtin ルーチンを変更するメソッドを実装する場合は、そのメソッドはプロシージャで、オブジェクト宣言内の通常の規則に従います。これは、最上位ルーチンを呼び出す場合でも Maple が変更を呼び出すことが可能であることを意味します。関数コールが最上位ルーチンを実行するようにするには、完全修飾名を使用します。
特定のルーチンの変更
convert メソッドは、別のタイプからオブジェクトへの変換と、オブジェクトから別のタイプへの変換の、2 種類の変換を実行可能である必要があります。
diff メソッドは、オブジェクトを微分、オブジェクトでの微分、それら両方の微分の 3 種類を処理できる必要があります。
オブジェクトが diff メソッドをエクスポートする場合は、has メソッドもエクスポートする必要があります。Maple は has を使用して、式に微分変数が含まれるかどうかを判断します。has が false を返す場合は、0 が直ちに出力されます。has の組み込み版はオブジェクトの内部を調べないため、false を出力します。
組み込みの eval には 2 つの使い方があります。
eval( expr );
eval( expr, substitutions );
オブジェクトの eval メソッドは、2 番目の使い方のみを変更できます。
eval は再帰的に動作するので、expr が eval を実装するオブジェクトを含む場合は、そのオブジェクトの eval メソッドが呼び出されます。
組み込みの eval の 2 番目の使い方では、さまざまな方法で代入を指定できます。eval メソッドは、各々の式をそれぞれ別の引数として渡します。
evalhf メソッドを実装すると、オブジェクトが Maple の evalhf サブシステムで使用できます。evalhf メソッドは、オブジェクトを evalhf が扱うことができるタイプに変換します。最高のパフォーマンスのためには、次のいずれかを出力する必要があります。
ハードウェアの浮動小数点数
hfarray
語彙スコーピングを使用しない Maple のプロシージャ
evalf メソッドは、オブジェクトを浮動小数点値に変換します。
evalf メソッドは、インデックス (evalf[digits]) 付きで呼び出すと、式が評価する桁数を指定します。オブジェクトメソッドが呼び出されると、環境変数 Digits の値が (与えられた場合には) 設定されます。
has メソッドは、オブジェクトが式を含むかどうか、式がオブジェクトを含むかどうか、オブジェクトが別のオブジェクトに含まれるかどうかを調べます。
オブジェクト名をタイプとして使用する has メソッドをエクスポートするオブジェクトを宣言するときは、名前付きオブジェクトの構文
module Obj() ... end:
が使用されます。割り当て構文
Obj := module() ... end:
を使用すると、has メソッドが Obj をタイプとして使用する場合は、割り当て中にエラーが発生します。has ルーチンは、最上位の割り当てが発生するときに実行され、割り当てられた名前が、その名前に割り当てた値に含まれるかどうかを調べます。これは、再帰的な割り当てを回避するために行われます。has メソッドは、この割り当てに対して呼び出されますが、オブジェクト名は割り当てられないため、タイプチェックは失敗します。
map、map2、および map[n]
map、map2、および map[n] 関数は、1 つの map メソッドによって変更されます。map メソッドの呼び出しシーケンスは以下のとおりです。
export map::static := proc( oindex::integer, inplace::truefalse, func ) ... end:
oindex: マッピングされた式のインデックスに対応します。
inplace: マッピングがインプレースで発生したかどうかを決定します。インプレースマッピングがサポートされていない場合は、inplace が true の場合に例外が発生します。
func: マッピングされる関数
上記のパラメータ宣言が使用される場合は、特殊なシーケンス _rest は func に渡される引数で、要素 _rest[oindex] はマッピングされる要素です。 e が _rest[oindex] の要素である場合は、マッピングされた値は以下のとおりです。
func( _rest[..oindex-1], e, _rest[oindex+1..] )
max および min
max および min ルーチンを変更するには、以下の宣言によりメソッドをエクスポートします。
export max::static := proc( definedOnly::truefalse, a, b:=NULL, $ ) ... end;
export min::static := proc( definedOnly::truefalse, a, b:=NULL, $ ) ... end;
definedOnly: max['defined']( .. ) に対応し、未定義の値が比較されたときの挙動を決定します。definedOnly が true の場合は、未定義の値は無視されます (つまり、定義済の値が出力されます)。definedOnly が false の場合は、ルーチンは未定義の値があった場合に FAIL を出力します。
Maple では max および min ルーチンは、コンテナと要素の組み合わせを扱います。これらの場合を扱うには、メソッドは b が NULL であるケースを扱う必要があります。これは、コンテナでない場合はコンテナオブジェクトに保存された最大 (または最小) 値、またはオブジェクトを出力することを示します。一般的なケースでは、 a および b は値を持ち、aまたは b の少なくとも 1 つはオブジェクトです。オブジェクトがコンテナの場合は、オブジェクトの要素間の最大 (または最小) 値および他の引数が出力されます。それ以外の場合は、a および b の最大 (または最小) 値が出力されます。
オブジェクトが minまたは max を定義しない場合は、Maple は多重定義された < 演算子が定義されている場合は使用して正確な要素を決定します。
member メソッドは、コンテナが値を含むかどうかを判断します。コンテナが値を含む場合は、member は要素を取得するため ?[] によって使用されるインデックスを出力します。コンテナが値を含まない場合は、0 が出力されます。
オブジェクトが member を実装しようとし、?[] メソッドを実装していないとき、値がコンテナ内にある場合は undefined を、ない場合は 0 を出力します。
?[] の実装の結果の詳細は、Object,operators を参照してください。
normal メソッドは以下のシグネチャを持ちます。
export normal::static := proc( self, { expanded::truefalse = false }, $ ) ... end:
expanded: expanded オプションが normal であるかどうかに応じて true または false
subs メソッドは以下のシグネチャを持ちます。
export subs :: static := proc( inplace::truefalse, eqns::{list,MyObject}, expr::anything, $ ) ... end:
inplace: 代入がインプレースで発生したかどうかを決定します。
eqns: 代入のリストまたは subs メソッドが実行されるオブジェクト
eqns がリストである場合は、第三引数 (expr) は subs メソッドが実行されるオブジェクトです。第二引数が subs メソッドを含むオブジェクトの場合は、第三パラメータは任意でかまいません。
オブジェクトはタイプとして直接使用し、このテストを調整するために ModuleType メソッドを定義できます。しかし、オブジェクトを認識していないタイプはテストできません。これは、type メソッドを変更して実行可能です。
type の呼び出しの第一引数が type メソッドをエクスポートするオブジェクトで、第二引数がモジュールタイプでなく名前が `module` でない場合は、type の変更が行われます。
export type :: static := proc( self::MyObject, t, $ ) :-type( self:-value, t ) end:
第一引数はオブジェクトで、第二引数は与えられたタイプです。
type の変更は、以下の 3 つのうちの 1 つの値を出力します。
true : オブジェクトは与えられたタイプと一致します。
false : オブジェクトは与えられたタイプと一致しません。
NULL : 未決定、タイプチェックは type の変更が行われていないかのように継続されます。
参照
module、Object、object、Object,create、Object,method、Object,operators
Download Help Document