Location : Home > Languages > Perl > Package Title : Math::Symbolic::Custom::Simplification |
![]() |
Math::Symbolic::Custom::Simplification - ユーザ定義の簡約化ルーティン
package Math::Symbolic::Custom::MySimplification; use base 'Math::Symbolic::Custom::Simplification'; sub simplify { my $tree = shift; # ツリーの簡約化 return $simplified; } 1; # それからコードの他の箇所で Math::Symbolic::Custom::MySimplification->register(); # MySimplification を利用するコード。 # $tree->simplify() では Math::Symbolic::Custom::MySimplification::simplify($tree) を呼び出す。 Math::Symbolic::Custom::MySimplification->unregister(); # デフォルトの簡約化ルーティンまたは予め登録された簡約化ルーティンを用いるコード
Math::Symbolic モジュールへの拡張である。そのモジュールとの基本的な親和性が要請されている。
Math::Symbolic はいくつかの組み込みの簡約化ルーティンを提供する。しかしながら、これらは複合した簡約化を処理することができない。この拡張は、本モジュールをサブクラス化することでデフォルトの簡約化ルーティンをオーバーライドする機能を提供する。本モジュールのサブクラスは Math::Symbolic ツリーの簡約化を実装する簡約化オブジェクトメソッドを定義することを要請される。
register 及び unregister の2つのクラスメソッドが継承される。register メソッドをユーザのサブクラスで呼び出すと、Math::Symbolic::Operator オブジェクトで呼び出された simplify() を実行する simplify メソッドとして、ユーザのクラスを登録する。ユーザサブクラスで unregister メソッドを呼び出すと、以前に簡約化ルーティンがあったところに回復する。
簡約化ルーティンローカライズするために異なるサブクラス上で register() 及び unregister() を連続して用いることもある。古いルーティンはスタックとして保存される。
本モジュールのサブクラスが、たとえば MySimplification 及び MyOtherSimplification があるとして、MySimplification->register() を実行し、それから MyOtherSimplification-&fgt;register() を実行すると MyOtherSimplification の簡約化ルーティンを提供する。MyOtherSimplification を解放すると MySimplification からルーティン戻る。
通常でない順番で解放した場合(たとえば上の例で MySimplification instead of MyOtherSimplification の替わりに MySimplification を解放した場合)、解放した簡約化ルーティンを含むあらゆる簡約化ルーティンが削除され、MySimplification 以前に効力のあったルーティン(ここではデフォルトの simplify())が回復される。
本モジュールでは何もエクスポートしない。
register
新しい Math::Symbolic 簡約化ルーティンとして simplify() サブルーティンを登録するクラスメソッド。
unregister
不要になった簡約化ルーティンを解放するクラスメソッド。
本モジュールの最新のバージョンは http://steffen-mueller.net または CPAN で入手可能である。
Math::Symbolic
デフォルトの簡約化ルーティンを含む Math::Symbolic::Operator
Math::Symbolic の拡張に関する詳細については Math::Symbolic::Custom and Math::Symbolic::Custom::Base
Steffen Muler, symbolic-module at steffen-mueller dot net
Copyright (C) 2005 by Steffen Muler
本ライブラリはフリーソフトウェアであり、Perl 本体と同等の条件で修正/再配布してもよい。Perl 5.8.4、利用者の選択によっては Perl 5以降の入手可能なバージョンで利用可能である。
![]() |
Updated : 2006/08/13 |