数理解析研究所講究録1085 巻 1999 年 1-8

1

数式処理システムにおけるMiddle Regulator の開発
神戸大学大学院自然科学研究科
出口博章 (Hiroaki DEGUCHI)

1$*$

はじめにWWW (World Widw Web) における情報の閲覧の $-$ 画面のことはホームページ、 またはウェブページと呼ばれるが、 本稿ではウェブページという名称を使用する。
ミドルレギュレータ (Middle-regulator) の概念に関しては文献 [1] に詳しい説明がある。
本稿では簡単に概要を述べる。

2

ミドルレギュレータの作成
ミドルレギュレータとは、 ウェブブラウザをユーザインターフェ $-$ スとして数式処理システムを利用するために、 ブラウザと数式処理システムの間に位置するものである (図 1)。

数式処理システムをウェブページのオブジェクトとして組み込むためのインターフェ– スとしての機能と、 異なる種類の数式処理システムを同じ様な操作で利用するために、 数式処理システム独自の表記法を変換する翻訳機能の二つの機能を持つ。 今回作成したものはブラウザ側へのインターフェ $-$ ス部を Perl で$\mathrm{C}\mathrm{G}\mathrm{I}$(Common Gateway Interface)

ラムとして作成し、 数式処理システム側へのインターフェ $-$ ス部は Perl あるいは

フ ログ$\circ$$\mathrm{C}$で作成しており、 その二つの部分をあわせてミドルレギュレータと呼ぶことにする (図 2)。
数式処理システムがフロントエンドとカーネルによって構成されており、 その間で行なわれている通信の方法が公開されている場合は、 ミドルレギュレータはその数式処理システムのカーネルに接続して利用する (図 3)。 Wolfram Research, Inc. の Mathematica を使用する場合は、 MathLink $([2][3])$ を利用することによってカーネルに接続し、 カーネルの数式処理機能を利用できるため MathLink によってカーネルを直接利用する。
また、 実際の演算を行なう計算機は UNIX 系のシステムをサーバとして利用することを前提としている。 よって、 数式処理システムがフロントエンドとカーネルに分かれていな*deg@kobe-u .ac.jp

2

図 1:

図 2:

3

図 3:

い場合、 あるいは分かれていてもその間での通信手段が公開されていない場合は、 UNIXの標準入出力を利用してミドルレギュレータからパイプを通して数式処理システムを利用することになる (図 4)。富士通 HPC センターにおいて開発されている

用方法は今のところはミドルレギュレータで作成したパイプと$\mathrm{R}\mathrm{i}\mathrm{s}\mathrm{a}/\mathrm{A}\mathrm{s}\mathrm{i}\mathrm{r}([4])$$\mathrm{R}\mathrm{i}\mathrm{s}\mathrm{a}/\mathrm{A}\mathrm{s}\mathrm{i}\mathrm{r}$の利側の標準入出力との接続での利用となる。

3

翻訳機能
正規表現を利用することによって、 ミドルレギュレータはカーネルの差異を吸収することが可能になるが、 ここではユーザが GUI を使わずに直接ミドルレギュレータにコマンドを送る場合を考える。 カーネルは Mathematica の場合を例にとる。

Expand$[\mathrm{e}\mathrm{q}]$は$\mathrm{e}\mathrm{q}$を展開する関数であるが$\ulcorner_{\mathrm{e}\mathrm{q}}$を展開」 と表現できたほうが、 日本語を母国語とするユーザにとっては覚えやすい。 同様に、 Plus [ ,Bl は A と$\mathrm{A}$を計算する関数であるが、「$\mathrm{A}$足す B」や$\text{「}\mathrm{A}$と$\mathrm{B}$$\mathrm{B}$を加えたものを足す」 と命令出来たほうがユーザには覚えやすい。
このような変換を行なうために、 変数$input にコ-–

サからの入力が代入されているも

4

図 4:のとすると、 Perl では以下のように書くことによって実現できる。
[$1, $2]/g;$input$=\sim$s/(\d+)\s*足す$input$=\sim$s/(\d+)\s* と \s*(\d+)\s* を足す/Plus[$1, $2]/g;$input$=\sim \mathrm{s}/(.*)$

「$input$=\sim \mathrm{s}/$$\backslash \mathrm{s}*(\backslash \mathrm{d}+)/\mathrm{p}\mathrm{l}\mathrm{u}\mathrm{S}$を展開/Expand[$l]/g;

マッチする条件/置換文字列 /g; 」のかたちをしており、置換文字列中の$1や$2 などはマヅチする条件のなかの「0」で囲まれた部みを前から順番に$1, $2, $3, $4, . . .としたものである。 注意点は、 マッチする条件どうしの衝突がないようにしておくことである。 たとえば、 上の例に付け加えて 「展開」 という単語を 「も設定した場合、$\ulcorner_{\mathrm{e}\mathrm{q}}$を展開」 を$\text{「_{}\mathrm{E}\mathrm{x}\mathrm{p}\mathrm{d}}\mathrm{m}$[$\mathrm{e}\mathrm{q}^{]}\text{」}$$\mathrm{E}\mathrm{x}\mathrm{p}\mathrm{a}\mathrm{n}\mathrm{d}$に置換する前に」 に置換するように$\ulcorner_{\mathrm{e}\mathrm{q}}$を」 と置換$\mathrm{E}\mathrm{x}\mathrm{p}\mathrm{a}\mathrm{n}\mathrm{d}$される可能性もあり、 結果が予想と食い違う場合もありうる。
また、 置換のための上記のような行が多くなると、 ミドルレギュレータのソース内部ではなく外部にテーブルとして作成したほうが置換内容を編集するのに便利なため、 パターンマッチの条件と置換文字列の対応テーブルを外部に作成して格納している (図 5)。デー
タベース形式は UNIX で標準的に利用されている DBM 形式を利用している。

4

グラフィックス出力
Mathematica のグラフィックス出力は大域変数$DisplayFunctionの値がデフォルトとして使用されるようになっているため、 その値を

5

図 5: データの流れ, \#1&$\mathrm{D}\mathrm{i}\mathrm{s}\mathrm{p}\mathrm{l}\mathrm{a}\mathrm{y}[mathrm{D}\mathrm{i}\mathrm{s}\mathrm{p}\mathrm{l}\mathrm{a}\mathrm{y}$からDisplay [ $01^{\text{パス}名}/$ ファイル名$1\dagger,$$\backslash \#,$$||\mathrm{G}\mathrm{I}\mathrm{F}^{\mathrm{t}}\mathrm{I}$]$\$に変更する。 第三の引数は Ver 3 から利用できるようになったもので、 出力グラフィック

スの種類を指定する。 このように$DisplayFunction の変更を最初に実行しておくことによって、 それ以降はカーネルはグラフィックス出力を 「/パス名/ ファイル名」 に GIF 形式で出力する。 GIF 形式を選択した理由は、 ウェブページにおける画像の標準的な形式の–っだからである。
ただし、 このままで使用すると–つ問題点がある。 グラフィックスを出力するファイル

名を途中で変更するためには$DisplayFunction の値を変更するか、 デフォ) レトのように$DisplayFunction 内で $Display を使用しておいて$Display を変更する必要が出てくる。
この状態ではグラフィックス出力を 2 回以上繰り返すと、 前の出力結果は後の出力結果で上書きされることになり、 複数のグラフィヅクス出力を同時にウェブページに表示することができない。

プログラムの内部で、カーネルから MathLink のパケヅトタイフ 「$\circ$

そこで、$\mathrm{C}$」$\mathrm{R}\mathrm{E}\mathrm{T}\mathrm{U}\mathrm{R}\mathrm{N}\mathrm{T}\mathrm{E}\mathrm{X}\mathrm{T}\mathrm{p}\mathrm{K}\mathrm{T}$のパケットを拾った時にその文字列が「-Graphics-」 か「-SurfaceGraphics-」 に–致す
るかどうかを調べて、一致すれば、 $Display Function で設定した「/パス名/ ファイ) 名」のファイルをカウントアヅプしながら番号を付加した名前に変更し 図$($は 沖 HTML カウント番号-\n-Graphics-」、$\ulcorner_{-\mathrm{s}\mathrm{u}\mathrm{r}\mathrm{f}}\mathrm{a}\mathrm{C}\ominus \mathrm{G}\mathrm{r}\mathrm{a}\mathrm{p}\mathrm{h}\mathrm{i}\mathrm{c}\mathrm{s}-\lrcorner$は$6)_{\text{、}}\ulcorner_{-\mathrm{G}\mathrm{r}\mathrm{a}_{\mathrm{P}}}\mathrm{h}\mathrm{i}\mathrm{C}\mathrm{S}-\lrcorner$$\ulcorner_{-\mathrm{H}\mathrm{T}\mathrm{M}\mathrm{L}}$カウント番

6

図 6: GIF ファイルの移動

図 7: データの流れ

号-\n-SurfaceGraphics-」 と変更して出力するようにして.

$\mathrm{P}\mathrm{e}\mathrm{r}\mathrm{l}$部分で$\ulcorner_{-\mathrm{H}\mathrm{T}\mathrm{M}\mathrm{L}}$カウン

ト番号-」 という文字列をイメージタグに書き換えてからウェブページとして出力すれば、そこにグラフィヅクスがリンクされて表示されることになる (図 7)。
この方法で、 関数の後に「; 」 をつけた場合は沖 Graphics-」や$\ulcorner_{-\mathrm{s}\mathrm{u}\mathrm{r}\mathrm{f}}\mathrm{a}\mathrm{C}\mathrm{e}\mathrm{G}\mathrm{r}\mathrm{a}\mathrm{p}\mathrm{h}\mathrm{i}\mathrm{C}\mathrm{S}-\lrcorner$

がカーネルから返ってこないため、 グラフィックスがウェブページに表示されない、 という点のみが Mathematica のノートブックとの違いである (図 8)。

5

今後の課題
以上のようにミドルレギュレータを作成することによって、 インターネット上でウェブブラウザを使用して数式処理システムを利用することを実現した。 この方法の利点はイン

7

図 8:

8
夕–

ネットの代名詞ともなっているウェブブラウザをユーザインターフェ– スとして利用することと、 複数の種類の数式処理システムを統– 的に扱うことができることである。 こ
れらよって、 これから数式処理システムを利用しようとするユーザにとっての垣根を低くすることが可能となる。 ブラウザ上でどのようなユーザインターフェ– スが最も使いやすいかということについては研究が必要である。 今回はブラウザを利用するユーザがテキス

ト入力する場合を想定したため、 日本語入力からの翻訳を例にとったが、 GUI を利用する場合は裏でやりとりされる情報は簡潔な方がよい。 数式処理システムー般に対しての統合的な表記方法についても今後の課題としたい。
また、 各数式処理システム特有の機能をうまく利用するため、 ミドルレギュレータが送られてきた式の特性に応じて処理するという、 数式処理システムを自動的に選択する機能についても今後の課題としたい。

参考文献[1] DEGUCHI Hiroaki: The Integrated Use of Computer Algebra Systems across theInternet, Proceedings of Asian Symposium on Computer Mathematics, 1998, pp.101-105[2] MathLink Reference Guide Version 2.2, Wolfram Research, Inc., 1993
[3] Todd

Gayley:AMathLink

Tutorial,$http.\cdot//www.mathSource.com/cgi-$$bin/MathSourCe/EnhancementS/MathLink/\mathit{0}\mathit{2}\mathit{0}\theta- \mathit{6}\mathit{9}\mathit{3}$[4] Masayuki

Noro$flp.\cdot//endeavor$ .

andTakeshi

Shimoyama:

fujitsu. $co.jp/pub/isis/asir/doc/man$ . ps. $gz$

AsirUser’sManual,