Asir においては, 組み込み関数と同名の関数を定義することはできない.
[101] def fctr(X) { print("afo");} def : builtin function fctr() cannot be redefined.定義しようとする関数が, 組み込み関数としてもう存在しているかどうかは, 関数 flist() の出力を見ればわかるが, とりあえずダミーで定義して みるのが最も簡単だろう. (flist() の出力をみるのは大変である.) とは言え, 実際に困るのは, 既にあるライブラリ中のユーザ関数名との衝突であ る. あるセッションで, 既に定義されているユーザ関数との衝突は, ctrl("verbose",1) により見ることができる.
[183] def afo(X) { print("afo");} [184] def afo(X) { print("bfo");} Warning : afo() redefined. [185]しかし, この方法は読み込んであるファイルにしか対応できないので, 結局の ところ, 関数名に固有の prefix をつけるのが現実的であろう. 例えば, 関数 名は, noro_ のように, 書いた本人を識別できるような文字列で始ま るようにする. poly_ やmatrix_ のように数学的に意味がある prefix を使うのは自然なように見えるが, これらは「当たる」危険性が高い ので避けたほうがよい. 以上のような方法の他にモジュール機能を用いて自分の書いたライブラリを カプセル化してしまう方法がある. これについては, 次の節で解説する.
これに関連して, Asir Contrib プロジェクトにおいて
種々のシステムを混用する際の関数名の
混乱を避けるために, 著者 (T) が OpenXM 版のソースにおいて
OpenXM/src/asir-contrib/packages/src/names.rr なるテンプレートを準備
している.
そこでは, 共通関数名仕様に基いて, それを実現する Asir プログラム
が書かれている.
OpenXM 版の Risa/Asir (OpenXM/Risa/Asir
)
では asir contrib ライブラリを起動時に自動的に読み込む.
names.rr に定義されている関数が,
OpenXM/Risa/Asir の asir contrib のトップレベルの関数
である.
たとえば以下のようなきまりで, 関数名がついている.
base_ で始まる関数 | 置き換えなど基本的な種々の演算 |
matrix_ で始まる関数 | 行列に関する種々の演算 |
print_ で始まる関数 | TeX への変換などの演算 |