ルール操作
概要:ETIはルールを動的に追加削除する機能を持っています。この機能によって、自己書き換え可能な高度なプログラミングが可能になります。以下に現れる変数*wにはワールド識別子を指定します。
述語名/引数 | (addRule *w *r ) (addRule *r) (addRule *w *r *order *ruleID) |
要約 | ルールを追加します。 |
互換性 | Win Unix |
引数 | *w [in] ルールを追加するワールド *r [in] ルールを表すS式 *order [in] ルールを追加する位置 *ruleID [out] 追加したルールを表す識別子 |
成功/失敗 | 第1,2形式 true ルールの追加に成功した。 false ルールの追加に失敗した。 第3形式 true ルールの追加に成功しかつ*ruleIDのマッチングに成功した。 false 上記以外。 |
解説 | *rにはN、またはDルールを表すs式を指定します。 *orderは同じヘッドのルールでの挿入する位置を指定します。0で先頭に挿入されます。*orderはDルールの挿入の時だけ有効でNルールの挿入では無視されます。
|
例1 Nルールの追加:
(RuleClassOrder 0)
(Rule a
(Head (test))
(Body (exec (addRule (Rule t2 (Head (ttt *1)) (Body (print *1))))
(rebuildRules))))
例2 Dルールの追加:
(as (test):
(addRule (as (ppp *1):(print *1)))
(rebuildRules)
(ppp test))
述語名/引数 | (rebuildRules *w) (rebuildRules) |
要約 | ルールを再構築し、有効化します. |
互換性 | Win Unix |
解説 | Nモードでの実行の際、rebuildRulesは、ルールの再構築を要求するだけです。 再構築は、rebuildRulesを含むNルールの処理が終了した時点で行われます。 |
述語名/引数 | (load *w *file) (load *file) |
要約 | ルールをファイルからロードします。 |
互換性 | Win Unix |
解説 | *wにはロードするワールドを指定します。省略した場合はデフォルトのワールドにルールがロードされます。 実行時にはロードしたルールを有効にするために、rebuildRulesを実行する必要があります。 この述語は、既存のルールを全て削除してから、新しいファイルを読み込みます。 |
述語名/引数 | (include *w *file) (include *file) |
要約 | ルールをファイルからインクルードします。 |
互換性 | Win Unix |
解説 | *wにはインクルードするワールドを指定します。省略した場合はデフォルトのワールドにルールが挿入されます。 実行時にはロードしたルールを有効にするために、rebuildRulesを実行する必要があります。 この述語は、既存のルールを保存します。 |
述語名/引数 | (deleteRule *w *s) (deleteRule *s) |
要約 | *sにマッチするルールを一つ削除します。*sにはDまたはNルールを表すs式を指定できます。 |
互換性 | Win Unix |
解説 | *sは、完全なルールを記述する必要は無く、変数が含まれていてもかまいません。 |
例:
(as (test):
(deleteRule (as (test | ?) | ?)))
;;ヘッドの述語名がtestである全てのルールが削除の対象になります。
;;しかし、削除されるのは最初にマッチした一つのルールです。
述語名/引数 | (deleteRules *w *s) (deleteRules *s) |
要約 | *sにマッチするルールを全て削除します。*sにはDまたはNルールを表すs式を指定できます。 |
引数 | [in]*s 削除するルールを表すs式。変数を含めることができる。 [in,out] 削除対象のワールドID。 |
互換性 | Win Unix |
成功/失敗 | 成功:一つ上のルールを削除した。 失敗:それ以外。 |
解説 | *sは、完全なルールを記述する必要は無く、変数が含まれていてもかまいません。 |
述語名/引数 | (getRule *w *s) (getRule *s) (existsRule *w *s) (existRule *s) |
要約 | *sにマッチするルールが存在するかどうか調べます。 |
引数 | *w [in] ワールド識別子 *s [in] ルールを表すパターンとしてのS式 |
互換性 | Win Unix |
解説 | *sは、完全なルールを記述する必要は無く、変数が含まれていてもかまいません。 |
述語名/引数 | (getRules *w *s *r) (getRules *s *r) (existsRule *w *s) (existRule *s) |
要約 | *sにマッチする全てのルールをs式に変換して*rに代入します。 |
互換性 | Win Unix |
解説 | *sは、完全なルールを記述する必要は無く、変数が含まれていてもかまいません。 |
述語名/引数 | (getNRules *w *r) |
要約 | ワールド*w中の全てのNルールを取得します。 |
互換性 | Win Unix |
引数 | *w [in] ワールド識別子 *r [out] ルール集合を表すリスト |
成功/失敗 | true ルールの取得に成功し、*rのマッチングに成功した。 false 上記以外 |
解説 | *wがルールを含まないときも成功し、*rに()が代入されます。 |
述語名/引数 | (getDRules *w *r) |
要約 | ワールド*w中の全てのDルールを取得します。 |
互換性 | Win Unix |
引数 | *w [in] ワールド識別子 *r [out] ルール集合を表すリスト |
成功/失敗 | true ルールの取得に成功し、*rのマッチングに成功した。 false 上記以外 |
解説 | *wがルールを含まないときも成功し、*rに()が代入されます。 |
述語名/引数 | (collectAllRuleApplications *w *r) |
要約 | ワールド*w上の現在の可能なNルールの適用の仕方を全て返します。 |
互換性 | Win Unix |
引数 | *w [in] ワールド識別子 *r [out] 適用の仕方のリスト |
成功/失敗 | true 適用可能なルールが存在し、*rのマッチングに成功した。 false 上記以外 |
解説 | *rの形式は以下の通りです。 *r = (*r0 *r2 ... *rn) *rn = (優先度 ルールインデックス 節インデックス *hb) *hb = (ボディ識別子0 ボディ識別子1 ボディ識別子2 ... ボディ識別子m) 例: ((0 1 2 (3 1))) 上のS式は、collectAllRuleApplicationの結果です。
|
述語名/引数 | (collectAllRuleApplications2 *w *r) |
要約 | ワールド*w上の現在の可能なNルールの適用の仕方を全て返します。 |
互換性 | Win Unix |
引数 | *w [in] ワールド識別子 *r [out] 適用の仕方のリスト |
成功/失敗 | true 適用可能なルールが存在し、*rのマッチングに成功した。 false 上記以外 |
解説 | *rの形式は以下の通りです。 *r = (*r0 *r2 ... *rn) *rn = (ルール識別子 節インデックス *hb) *hb = (ボディ識別子0 ボディ識別子1 ボディ識別子2 ... ボディ識別子m)
|
述語名/引数 | (applyRule *w *r) |
要約 | ワールド*wに指定した方法でルールを適用します。 |
互換性 | Win Unix |
引数 | *w [in] ワールド識別子 *r [in] ルールの適用の仕方を指定するリスト |
成功/失敗 | true ルールの適用に成功した。 false 上記以外 |
解説 | *rに代入するS式は、collectAllRuleApplication/2またはcollectAllRuleApplication2/2で返される適用の仕方の要素ど同形式です。 |