出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/12/09 06:51 UTC 版)
ナビゲーションに移動 検索に移動Risa/Asir(りさ・あじーる[注釈 1])は、竹島卓・横山和弘・野呂正行らにより富士通研究所で開発されたオープンソースの計算機代数システムである。数式処理エンジン Risa (Research Instrument for Symbolic Algebra; 記号代数のための研究道具)とインターフェイス実装 Asir[注釈 2] からなる。 2000年以降、オリジナルを安定版 (STABLE) とし、開発版 (HEAD) は野呂正行の転出先である神戸大学へ中心を移し[注釈 3]、OpenXM contrib2[注釈 4] として OpenXM コミッターによって開発されている(Asir2000 神戸版)。Risa/Asir は Windows・macOS及び各種UNIX上で動作し、開発は主にFreeBSD上で行われている。
主な特徴[2]
インターフェイスとしての Asir はコマンド asir によって端末から利用するコマンドライン(CLI)アプリケーションである。Windows版の asirgui.exe は端末上で asir を呼び出した状態を模したソフトウェアであり、マウス操作を想定した一般的なGUIソフトウェアではない。macOS版では十進BASIC[3]のインターフェイスを模した cfep[注釈 5] を利用することができる。
Risa/Asir のユーザ言語も Asir と呼ばれ、標準入力から対話的に利用することができるほか、これはC言語に似たプログラミング言語としての性格を持っていて、予め Asir で書かれたソースファイルを読み込んで動作させることもできる。
ユーザ言語 Asir はC言語を下敷きとして設計されているために多くの特徴をC言語と共有しているが、プログラム変数が型を持たない・ switch や goto 文を持たない・有理数に対する計算が通常のように使用できる・リストが扱えるなどの点で Asir 独自の特徴が見られる。
各オブジェクトは可読な形式での入力からパーサーにより中間言語に変換され、Risa によって各々に応じた型を持つ内部形式に変換される。オブジェクトの型は type()・nytpe()・vtype() によって確認できる。
| type() | オブジェクトの型 |
|---|---|
| 0 | 0 |
| 1 | 数 |
| 2 | 多項式 |
| 3 | 有理式 |
| 4 | リスト |
| 5 | ベクトル |
| 6 | 行列 |
| 7 | 文字列 |
| 8 | 構造体 |
| 9 | 分散表現多項式 |
| 10 | 符号無し32bit整数 |
| 11 | エラーオブジェクト |
| 12 | 二元体上の行列 |
| 13 | MATHCAPオブジェクト |
| 14 | 一階述語論理式 |
| 15 | 小標数有限体上の行列 |
| 16 | 符号なし byte の配列 |
| -1 | VOIDオブジェクト |
| type() | ntype() | 数の型 |
|---|---|---|
| 1 | 0 | 有理数 |
| 1 | 1 | 倍精度浮動小数 |
| 1 | 2 | 代数的数 |
| 1 | 3 | 任意精度浮動小数 |
| 1 | 4 | 複素数 |
| 1 | 5 | 小標数素体の元 |
| 1 | 6 | 大標数素体の元 |
| 1 | 7 | 標数2の有限体の元 |
| 1 | 8 | 有限体の元 |
| 1 | 9 | 小位数有限体の元 |
| type() | vtype() | 不定元の型 |
|---|---|---|
| 2 | 0 | 一般不定元 |
| 2 | 1 | 未定係数 |
| 2 | 2 | 函数形式 |
| 2 | 3 | 函数子 |
Asir のプログラム変数は必ずASCIIの大文字で始まり、Asir では通常はプログラム変数を宣言することはしない。Asir の各対象はそれぞれ必ず何らかの型を持っているが、プログラム変数にはどんな型を持つ対象でも代入できるという意味で「変数には型が無い」。型を持たない変数を用いることによる豊富な代入操作が可能である。また、函数内に現れる変数は全てデフォルトで局所変数となる。大域変数を利用するには extern の宣言が必要である。
Asir では不定元と変数は明確に区別され、不定元は数学で用いる意味と同じく係数体上超越的な元である。よって不定元に何らかの値を代入するというのは、概念的に不適当であるとともにシステム的にも不正な操作である。しかしながら、変数に対する規約と異なり不定元及び函数名はASCIIの小文字で始まるため、実用上は不定元に対し意図せぬ代入が行われる心配は無用である。
newvect() を用いて明示的に生成する必要があり、サイズは固定される。要素への代入は自由にできる。vtol() / newvect() によって相互に変換可能である。固有名詞の分類