Risa/Asir

From Wikipedia, the free encyclopedia

Risa/Asir(りさ・あじーる[注釈 1])は、竹島卓・横山和弘・野呂正行らにより富士通研究所で開発されたオープンソース計算機代数システムである。数式処理エンジン Risa (Research Instrument for Symbolic Algebra; 記号代数のための研究道具)とインターフェイス実装 Asir[注釈 2] からなる。 2000年以降、オリジナルを安定版 (STABLE) とし、開発版 (HEAD) は野呂正行の転出先である神戸大学へ中心を移し[注釈 3]、OpenXM contrib2[注釈 4] として OpenXM コミッターによって開発されている(Asir2000 神戸版)。Risa/Asir は WindowsmacOS及び各種UNIX上で動作し、開発は主にFreeBSD上で行われている。

インターフェイス実装 Asir

主な特徴[2]

インターフェイスとしての Asir はコマンド asir によって端末から利用するコマンドライン(CLI)アプリケーションである。Windows版の asirgui.exe は端末上で asir を呼び出した状態を模したソフトウェアであり、マウス操作を想定した一般的なGUIソフトウェアではない。macOS版では十進BASIC[3]インターフェイスを模した cfep[注釈 5] を利用することができる。

ユーザ言語 Asir の文法

Risa/Asir のユーザ言語も Asir と呼ばれ、標準入力から対話的に利用することができるほか、これはC言語に似たプログラミング言語としての性格を持っていて、予め Asir で書かれたソースファイルを読み込んで動作させることもできる。

ユーザ言語 Asir はC言語を下敷きとして設計されているために多くの特徴をC言語と共有しているが、プログラム変数を持たない・ switchgoto 文を持たない・有理数に対する計算が通常のように使用できる・リストが扱えるなどの点で Asir 独自の特徴が見られる。

Asir の扱うオブジェクト

各オブジェクトは可読な形式での入力からパーサーにより中間言語に変換され、Risa によって各々に応じた型を持つ内部形式に変換される。オブジェクトの型は type()nytpe()vtype() によって確認できる。

Asir で使用可能な型
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の小文字で始まるため、実用上は不定元に対し意図せぬ代入が行われる心配は無用である。

リストと配列

  • リストの生成は "[" と "]" で囲むことで行われる。要素の区切りは "," である。
  • リストは実行中にサイズを変更できるが要素への代入を行うことはできない。
  • LISPに由来する強力なリスト操作
  • 他言語で配列 (array) に相当する型は Asir ではベクトル (vector) と呼ばれる。
  • ベクトルは newvect() を用いて明示的に生成する必要があり、サイズは固定される。要素への代入は自由にできる。
  • 行列・バイト列の扱いはベクトルに準じる。
  • ベクトルとリストは vtol() / newvect() によって相互に変換可能である。

機能拡張

  • モジュール・C言語ソース等による高い機能拡張性

OpenXM

  • OpenXM に基づく通信・分散計算

Asir が得意とする計算

参考文献

関連項目

外部リンク

Related Articles

Wikiwand AI