LinearAlgebra パッケージによるプログラミング
LinearAlgebra パッケージは、便利なインタラクティブな使用と効果的なプログラミングの両方を容易にするように設計されています。これを達成するために、組み込まれた 2 つのレイヤに組み込まれた module として実装されています。レイヤはインタラクティブ・レイヤとプログラミング・レイヤです。
|
プログラミングとモジュールについての注意
|
|
表記 LinearAlgebra[function] は便利でテーブルベースのパッケージ(すなわち、 Maple の以前のリリース向けに開発されたパッケージ)に対して使用される表記と互換性を持つ一方、プログラムを記述するとき、 LinearAlgbra ルーチンの名前が現在のセッションでいくつかの別の意味を持つかもしれないという可能性を認識しておかなければいけません。正しくこの状況を取り扱うために、次の 2 つの方法のうちの 1 つを使うことができます:
•
|
次の未評価にする引用符を使う。 LinearAlgebra['function']
|
•
|
次のモジュール要素の選択構文を使う。 LinearAlgebra:-function
|
:- 文の右辺は決して評価されないので、後者の方法でうまくいきます。
|
|
インタラクティブ・レイヤについて
|
|
インタラクティブ・レイヤは、オプションパラメータの省略、オプションパラメータの様々な順序での指定、そしてパラメータエラーに対する保護ができるプログラミング・レイヤに対する "ユーザーフレンドリー” なインターフェースです。このレイヤは LinearAlgebra パッケージに対するコマンドとそれに対応する LinearAlgebra パッケージのルーチンを提供します。 一般的にこれらのルーチンのための呼出し手順は、パラメータ、オプションデータと制御パラメータ (これらは省略が可能で、また望むとおりに与えることができます) が必要とされます。
一部の例外 (以下の例外を参照) を除いて、インタラクティブ・レイヤのルーチンは 3 つのステップを完了します。
|
2. ユーザーによって提供されないパラメータをデフォルト値に設定。
|
|
3. 結果を得るために、対応するプログラミングレイヤの手続きを呼び出す。
|
ユーザが書いている手続きの中で LinearAlgebra ルーチンを使用したいと思い、自作のルーチンの中で関連するデータを検査できるとすると、インタラクティブ・ルーチンを呼び出すことによって必要となるオーバーヘッドを負いたくはないでしょう。 プログラミング・レイヤへの直接的なアクセスはこの目的のために用意されています。
|
|
プログラミング・レイヤについて
|
|
プログラミング・レイヤは実際の計算エンジンへの高速なインタフェースです。それは LinearAlgebra:-LA_Main と呼ばれる LinearAlgebra パッケージのサブモジュールです。このサブモジュールは各々のインタラクティブ・レイヤ・ルーチンに対して 1 つの要素をエクスポートし、サブモジュールの要素の名前はインタラクティブ・レイヤ・ルーチンの名前に対応しています。たとえば、インタラクティブ・レイヤ・コマンド LinearAlgebra:-DotProduct(..) に対応して、プログラミングレイヤコマンド LinearAlgebra:-LA_Main:-DotProduct(..) があります。
注意: with(LinearAlgebra) を使用することによって、たとえば、 LA_Main:-DotProduct のようにプログラミング・レイヤ・コマンドはコマンドの短い形で利用できます。インタラクティブ・レイヤ・ルーチンにそれらのコマンドの長い形を通してでしかアクセスできないようにするので、with(LinearAlgebra:-LA_Main) を使用することは勧められません。LinearAlgebra パッケージへの導入 を参照して下さい。
インタラクティブ・レイヤ・ルーチンとは異なり、プログラミングレイヤルーチンはユーザーによって提供されるパラメータを検査しません、またそれらはユーザーによって提供されないパラメータをデフォルト値に設定しません。一方、プログラミング・レイヤ・ルーチンが特定のサブタスクを実行するためにプログラム・レイヤ・ルーチンを呼び出すかもしれないとき、それらはインタラクティブ・レイヤ・ルーチンを決して呼び出しません。
プログラミング・レイヤ・ルーチンは以下の特性によって特徴付けられます。
•
|
オプションパラメータはありません。すべてのパラメータが提供されなければなりません。
|
•
|
パラメータは指定された順序で提供されなければなりません。
|
•
|
特定のプログラミング・レイヤ・コマンドの呼び出し手順は常に対応するインタラクティブ・レイヤ・コマンドに対する有効な呼出し手順です。逆は正しくありません。この特徴は開発中のコードをデバッグするために役立ちます。
|
•
|
assertion checking がオンになっていない限り (kernelopts を参照)、パラメータはほとんど検査が実行されません。ルーチンに渡されるデータが正しい型で、正しい順序であることを確実にするのはプログラマー次第です。
|
プログラミング・レイヤ・ルーチンのすべてに対する正確な呼出し手順の一覧は LinearAlgebra Programming Layer Submodule Calling Sequences にあります。
|
|
例外
|
|
一般に、LinearAlgebra パッケージにおけるすべてのインタラクティブ・レイヤ・ルーチンに対してプログラミング・レイヤ・ルーチンは存在し、ほとんどのインタラクティブ・レイヤ・ルーチンの呼び出しはそれらに対応するプログラミング・レイヤ・ルーチンを呼び出します。この規則に対する2種類の例外、"Umbrella" ルーチンと Map(..) と Map2(..) コマンドがあります。
|
"Umbrella" ルーチン
|
|
"Umbrella" ルーチンは、渡されたデータの型によって利用可能な種々の異なるサブルーチンの中から選択するルーチンです。典型的な例は LinearAlgebra:-Multiply ルーチンです。入力されたデータが行列の組、行列とベクトル、行列とスカラー、またはそれらの可能な組み合せのいずれであるかによって、このルーチンはその特定の型のデータを扱うように設計され、対応しているインタラクティブ・レイヤ・ルーチンを呼び出します。 LinearAlgebra:-Multiply はそれ自身はさらにパラメータの検査を行わないが、対応するインタラクティブ・レイヤ・ルーチンが、検査を実行するために呼び出されます。一旦、確認が完了されると、対応するインタラクティブ・レイヤ・ルーチンに対するプログラム・レイヤ・ルーチンが呼び出されます。
注意: プログラム・レイヤ・ルーチン LinearAlgebra:-LA_Main:-Multiply は完全性のために用意されていますが、それを使うことによってほとんど何も得られません。引数の型がわかっているならば、適切なプログラミング・レイヤ・ルーチンを直接呼び出すより効率的でしょう。
|
|
Map(..) と Map2(..) コマンド
|
|
Map(..) と Map2(..) は対応するプログラム・レイヤ・ルーチンを呼び出しません、なぜならこれらのルーチンは様々な異なる入力式に作用することができ、入力の型により、ルーチンが何を行うかがはっきり決まってしまうからです。これらに対するプログラミング・レイヤ・ルーチンはインタラクティブ・レイヤ・ルーチンと同一です。
|
|
|
Download Help Document
Was this information helpful?