関数名 RunProlog ResetQueries 概要 #include "cpro.h"
RunProlog(DESCR) QueryDescr *DESCR;
ResetQueries()
RunProlog(DESCR)は、DESCRに記述されている質問を実行します。DESCRを指定してRunProlog()を呼び出す際には、必ず前もって同一の記述子を指定してParseProlog()を呼び出さなければりません。
RunProlog()は、質問が成功し、ひとつの解が見つかった場合には1を返します。同じDESCRを使って再度RunProlog()を呼び出し、バックトラックすることによってさらに他の解を得ることができます。しかし、これは違う記述子によってParseProlog(),RunProlog()を呼び出す前にしなければなりません。RunProlog()は、もうそれ以上他の解が見つからない場合には0を返します。
実行中にエラ−が生じた場合、RunProlog()は-2を返し、エラ−に関する情報はDESCRのret_code,ret_msgフィ−ルドに示されます。
述語end/0,bye/0,abort/0,exit/1は-3を返し、IF/Prologのアプリケ−ションからの出口を示します。
2つの質問の実行をインタ−リ−ブすることは不可能です。現在のバ−ジョンでは、1度に1つの質問しか実行できません。新しい質問記述子でRunProlog()を呼び出すと、新しい質問が実行される前に、スタックから前の質問に対する他の解が削除されます。
RunProlog(DESCR)は、以下の場合に質問の実行を再開します。
-前回のRunProlog()の呼び出しに対して、もうそれ以上他の解がないことを示す0が返された場合
-前回のRunProlog()の呼び出しが例外を生じた場合
-違う質問記述子によるRunProlog()の呼び出しや、ParseProlog()の呼び出しが質問の実行中にすでに行われていた場合
-IF/Prologのスタックをクリアする、マクロ関数ResetQueries()が呼び出された場合
実行後、QueryDescr構造体の各フィ−ルドは以下のようになります。
フィ−ルド 成功 失敗/例外/出口
qu_id 不変化 不変化 qu_cursor port$$fail ret_code 1 0,-2,-3 cpu_time 更新された 更新された parse_pos 不変化 不変化 exit_code 0 0またはユ−ザの設定 ret_msg yes 説明的メッセ−ジ no_vars 不変化 不変化 0 <= i < no_vars var[i].type Q TERMまたはユ−ザの設定 不変化 var[i].name 不変化 不変化 ユニオンのメンバは以下のいずれかです *var[i].loc.term TERMの値 未定義 *var[i].loc.ivalue Cのlong int値 未定義 *var[i].loc.dvalue Cの倍精度実数 未定義 *var[i].loc.string Cの文字列ポインタ 未定義
質問中の各変数に対して、そのTERMの値はDesc->var.typeで指定された型に変更されます。それは、Q_TERM, Q_INTEGER, Q_DOUBLE, Q_STRINGのいずれかで、その結果は対応する場所に割り当てられます。