- 著者
-
向井 国昭
井出 陽子
- 雑誌
- 情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
- 巻号頁・発行日
- vol.1, no.3, pp.36-36, 2008-10-27
高階述語の引数としてソート付きのラムダ式を許す評価器 (eval),および,適用可能な部分がなくなるまで書き換え規則を適用する項書き換え器 (reduce),この 2 つの述語を SWI-Prolog の上に実装した.関数を表す通常のラムダ項のほかに関係を表すラムダ項を新たに導入した.この導入により,Prolog の特長であるデータの流れの双方向性を活かす,いわば関係型のラムダ計算を実現した.Eval は代数構造における準同型規則を解釈する述語であり,reduce は等号論理のパラモジュレーション規則を解釈する述語であると見なす.つまりいずれも簡潔明快な根拠を持つ計算モデルに基づいて設計した.適用例として Emacs-lisp・Ajax・Unix シェルをとりあげ,それらと Prolog の間のインタフェースの実現方法を示す.Emacs-lisp へは S 式を送信し,それを実行させることにより制御する.こうして Emacs バッファの複雑な編集・制御に,宣言的な Prolog の限定節を用いることができる.Ajax とのインタフェースは,Ajax が関数式を Prolog CGI に送信し,Prolog はそれを eval 述語で評価し,結果の値を HTML として Ajax のフィルタに返信する,という流れである.Unix シェルの呼び出しは,Bash コマンドをまず Prolog の項として表現・生成・操作し,最後にそれを eval 述語でコマンドラインテキストに変換して Unix シェルに送信する.Two interpreters have been written on Top of SWI-Prolog; the one interprets sorted expressions including lambda calculus as arguments of higher order predicates calls, ant the other interprets term rewriting rules. Not only the functional lambda terms but also relational lambda term are now availabe adapted to bi-directional data flow feature of Prolog. In other words, a class of relational lambda caculus is now in Prolog. The implementation obeys fairly general two views that evaluation is homomorphism between algebras of a same kind, and that that on the other hand term rewriting rules are paramodulation of logics with equality. Thus our implementation is based on theoretical clear justifications. As applictions, some interface codes to Emacs-lisp, Ajax, and Unix-shell are illustrated; the extended prolog controls in a declarative way emacs-lisp using S-expressions and Prolog terms depending on the direction, talks with Ajax in Prolog terms, and communicates Bash shell using abstract unix command syntax in Prolog terms. These heterogeneous communications are described in an elegant and unified way based on the two new interpeters.