K-Prolog Compiler Version 6.0

以下のものは制御子と呼ばれ、Prolog言語プログラムの動作を意味付ける重要な構文要素です。制御子は組込み述語として使用する事もできます。
\+/1, once/1, repeat/0, forall/2 は制御子ではなく組込み述語です。
trueは成功します。
エラー
failは失敗します。
エラー
ゴールGoalが成功する時、成功します。
Goalが ! を含む場合、! の効果はGoalの外側に伝わりません。
エラー
| instantiation_error |
| type_error(callable,Goal) | Goalが変数でも実行可能な項でもありません |
ゴールGenerateが生成する解についてゴールTestが必ず成功するとき、
成功します。
\+ (call(Generator), \+ call(Test))
と同じです。
エラー
| instantiation_error |
| type_error(callable,Generate) | Generateが変数でも実行可能な項でもありません |
| type_error(callable,Test) | Testが変数でも実行可能な項でもありません |
! は親ゴールの選択点を取り除き成功します。
f(X) :- g(X),!.
f(X) :- h(X).
が起動されたとき、g(X) が(1回でも)成功して、!が実行されると、
g(X) の中で発生したすべての代替節と、f(X) の代替節 f(X):-h(X) は
このあと後戻りが起きても選択されません。
エラー
$記号は、それ以後実行されるカットの効果が祖父ゴールまでおよぶことを
インタープリタに指示します。$の効果は、その節の中にとどまります。
述語、
f(X) :- g(X).
f(X) :- h(X).
と、
g(X) :- $,!.
g(X) :- i(X).
で、f(X) を実行すると g(X) の最初の節のカットによって f(X) の代
替節もカットされます。なお、祖父ゴールがすでに$記号を実行していれば、
カットの効果はさらに先祖に波及します。$記号はいくつかのメタ述語で記述
するために用意されました。アプリケーションでは使用しないで下さい。
第1ゴールFirstと第2ゴールSecondが成功する時に限り成功します。
エラー
第1ゴールEitherが '-> 'の時は次の'If->Then;Else'を参照してください。
(Either;Or)は、第1ゴールEitherまたは第2ゴールOrが成功する時に限り成功します。
エラー
| If | 条件 |
| Then | then分岐 |
| Else | else分岐 |
If->Then;Elseは、Ifが成功してThenが成功するか、Ifが失敗して
Elseが成功する時に限り成功します。Ifの選択点はIfが最初に
成功した時に取り除かれます。
エラー
If->Thenは、Ifが成功してThenが成功する時に限り成功します。
Ifの選択点はIfが最初に成功した時に取り除かれます。
エラー
| catch(+Goal,+Catcher,+Recovery) |
| Goal | ゴール |
| Catcher | キャッチャー |
| Recovery | リカバリゴール |
catch(Goal,Catcher,Recovery) は、call(Goal)が成功するかまたは
throw/1により実行が中断されてthrow/1の引数がCatcherに単一化可能でかつ
call(Recovery)が成功する時に限り成功します。
throw/1の引数ががCatcherと単一化可能でなければ上位のcatchに処理させます。
エラー
| instantiation_error |
| type_error(callable,Goal) |
throw/1は成功も失敗もしません。throw/1は通常の処理の流れを
中断してcall/3に制御を戻す為に存在します。
エラー
| instantiation_error |
| system_error | Ballに対応するcatch/3を見つけられません |
呼出し可能項Goalを実行し、実行が失敗したときに成功します。
エラー
| instantiation_error |
| type_error |
呼出し可能項Goalを実行しますが、Goalの成功後に後戻りが発生しても
再実行しません。
エラー
| instantiation_error |
| type_error |
repeat/0は成功します。その後、後戻りが発生する度に
(カットされていなければ)何度でも成功します。
一つ上に戻る
目次に戻る