sitelogo
block, exit_block, cut_block
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.

block(+ゴール,+マーク,+終了ゴール) exit_block(+マーク) cut_block(+マーク)

block/3は、「マーク」によって示された特定の論理環境中で「ゴール」を実行します。「マーク」は、どんなProlog項でもかまいません。「ゴール」および「終了ゴール」は、Prologゴールでなければなりません。block/3は、以下のように作動します。

・まず「ゴール」を呼び出します ・次に、同一の「マーク」に対してexit_block/1が呼び出された時に、「ゴール」とそのサブゴールの実行を終了し、「終了ゴール」を実行します。

exit_block/1は、exit_blockの「マーク」と単一化可能な「マーク」をもつ最初のブロックから出ます。「ゴール」内で生成されたすべての変数束縛は保存されます。対応するブロックの「終了ゴール」が実行されます。

cut_block/1は、「マーク」によって示されたブロック中のすべての選択点を削除します。ブロックを扱う述語を使えば、ユーザはバックトラッキングの制御ができ、通常のProlog述語を使う場合よりも広範囲のコンテクスト中の選択点を削除することができます。これによって、IF/Prolog中でメタインタプリタの実現が容易に行えます。マッチするブロックがない場合、exit_block/1およびcut_block/1は失敗します。

以下は、block/3によって実現された完全なPrologインタプリタの例です。

inter(true) :- !. inter(!) :- cut_block(clause). inter((Goal1, Goal2)) :- !, inter(Goal1), inter(Goal2). inter(Goal) :- system_predicate(Goal), !, execute(Goal). inter(Goal) :- block((clause(Goal,Body), inter(Body)), clause, true).


Up read on...
scroll to top managed with ubiCMS