| ||||||||||
| MINERVA superseeded IF/Prolog.
Please see
http://www.ifcomputer.co.jp/MINERVA
for details.
We discontinued to sell IF/Prolog Dec 31. 2003. For current customers, we continue to provide professional support for IF/Prolog until Dec 31, 2008. 名前 ProOpen ProFetch ProClose 概要 INT ProOpoen(Goal,Cursor_Ptr) INT ProFetch(Cursor_Ptr) INT ProClose(Cursor_Ptr) TERM Goal; CURSOR *Cursor_Ptr; ProOpen() は項を IF/Prologに渡すのに使われ,項はPrologのゴールとして実行さ れます.そのゴールを実行するためには,ProFetch() を使用しなければなりませ ん.Cursor_Ptr は事前に確保された CURSOR 型のデータ構造を指していなければ なりません.このデータ構造は ProOpen() を呼び出すことにより初期化されます. 警告: C述語と Cプリミティブへの引数が後で使用されるのならば,それらは新しく確保 された変数に保存されなれなければなりません.というのは,Prologのゴールを新 しく呼び出すと,これらの引数が上書きされてしまうからです !!
ProFetch() は事前に open されているゴールを活性化し,その最初の解を返しま す.それ以降の解は,ProFetch() を繰り返し呼び出すことで,(存在すれば)得ら れます.ProFetch() は,(それ以降の)解が求められた時には0 以外の値を,それ 以外の場合には 0を返します.もし何も解が見つからない場合には, Cursor_Ptr->qu_state を調べて,その理由を知ることが出来ます. qu_state == 0: もうこれ以上解が存在しない. qu_state == -1: 例外処理(exception)が起動された. qu_state == -2: ゴールを終了させるために exit が使用された. 最初に ProFetch が呼び出される時は,ProOpen 呼び出されたすぐ後でなくてはな りません. ProClose() は, Prologの質問を close します.ProOpen() が呼び出され,すべ ての欲しい結果が ProFetch() で得られた後で,必ず ProClose() が呼ばれなくて はなりません.複数の Prolog ゴールが open された場合には,逆順に close さ れなくてはなりません. int member(list) TERM list; { TERM X; CURSOR cursor; X = MkVariable(); Protect(&x); ProOpen(MkStructure("member",2,x,list), &cursor); while (ProFetch(&cursor)) printt("%q is member of %q\n", x, list); ProClose(&cursor); UnProtect(&x); }
| ||||||||||
|
| Back> |
|