移動
次へ 前へ
上へ 最上
参考
理論背景 : ボックスモデルとコル−チン
C言語によるコル−チンの実現
IF/Prologによってサポートされるコル−チン
マクロ定義と関数のライブラリ−
バックトラックをするプログラム例
バックトラックをし、Epilogを持つプログラム例
イフコンピュータ > IF/Prolog > マニュアル > IF/Prolog V4.1 マニュアル > IF/Prolog Interfaces > IF/PrologからC言語へのインタフェ−ス > バックトラックするProlog述語をC言語で書く > C言語によるコル−チンの実現

C言語によるコル−チンの実現

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.

+--------------------------------------------------+ | コル−チン | | +----------------------------------------------+ | | | typedef struct{...} STATE (stores variables) | | | +----------------------------------------------+ | | +----------------------------------------------+ | | | int Function(PP,StatePtr) | | | | int PP; | | | | STATE *StatePtr; | | | | { switch(PP){ | | | | ... | | | | return((int)NewPP); | | | | } | | | +----------------------------------------------+ | +--------------------------------------------------+

           図C-6

C言語によるコル−チンの実現は、以下のものによって成り立っています。

-整数型関数 -STATEと呼ぶ構造体の定義 -整数変数であるプログラムポインタ(PP)

STATEは、コル−チンが活性化状態にある間、局所変数を格納するのに使われ、関数は、コル−チンの制御の流れを定義します(もちろん、それに加えて、そのル−チンが本来すべき仕事を実行します)。プログラムポインタあるいはPPは、STATEと共に入点/再入点を決定します。

最初にこの関数を呼び出すには、PP=0にします。それはEXITやdetachが実行されるたびに、新しいPPの値として正の数を返します。これは、制御の流れがコル−チンの実体の次のREDOまたはresumeにおいて、行くべき所を示しています。FAILまたはdetach & destroyでは、関数は0を返します。

create & start: PP=0の時、関数を呼びます

detach: 関数は新しいppの値として正の値を返します

resume: PP>0の時、関数を呼びます

detach & destroy: 関数は0を返します

コル−チンの実体を破壊しない、detachによる正の返り値が、プログラムポインタ(PP)の新しい値になります。この返り値は、detachがどこで生じたかを示し、またこのコル−チンの実体を次に活性化するときのパラメ−タPPとなります。(以下に示すコ−ドを参照)普通、プログラムポインタは、何回ゴ−ルを満たす解が見つかったかをかぞえるのに使われます。

上で説明したように、コル−チンとして呼び出された、この簡単なプログラムは、最初に呼び出した時、名前 "alice"を返し、最初のバックトラックで "john"を、2度目のバックトラックで "steve"を返します。もし4度目の活性化をすれば、もうそれ以上他の解は見つからず、失敗します。

NameFunc(PP) int PP; { switch(PP) { case 0: UnifyArg(1,StrAt("alice")); return 1; case 1: UnifyArg(1,StrAt("john")); return 2; case 2: UnifyArg(1,StrAt("steve")); return 3; case 3: return 0; } }

上記の例は、IF/Prologを使ってコル−チンを実現するための基本的な方法を示していますが、多くの”管理情報的”項目がこのプログラムから除外されていることに注意して下さい。これらの項目は簡単なものではありませんが、IF/Prologのユ−ザにとっては、後の章で説明するcpred.hの中にあるマクロ定義によってこれらが単純化されています。

続く..
IF/Prolog by Siemens
言語
English
Japanese
German
サーバー
USA
Japan
サイトマップ
索引
目次
全体目次
全体索引
印刷向き
imode
PDA
探索
document: http://www.ifcomputer.co.jp/IFProlog/Manuals/v4.1/advanced_feature/c_interface/cpredbw/implco/home_jp.html
published 2008/7/21 update 1995/11/6 (c) 1996-2006 IF Computer Japan
IF Computer 〒113-0022 Tel 03-5814-3352 ifcj@ifcomputer.co.jp
Customer Support 東京都文京区千駄木5-28-2   http://www.ifcomputer.co.jp
冒頭へ managed with ubiCMS