ルール操作

上へ

概要: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ルールの挿入では無視されます。


追加したルールを有効にするには、rebulildRulesを実行する必要があります。

例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)
優先度: 0から始まる整数。0が最も高い優先度を表す。
ルールインデックス: 0から始まる整数。ルールの識別子です。0はソースコード上で最も最上部に現れるルールであることを表す。
節インデックス: 0から始まる整数。ワールドの中の節の識別子。
*hb: ルールのヘッドアトムが節のどのボディアトムにマッチしたかを表すS式。ヘッドアトムがm個あるルールが適用されたときの*hbの形式は以下の通りです。

*hb = (ボディ識別子0 ボディ識別子1 ボディ識別子2 ... ボディ識別子m)
ボディ識別子h: マッチしたボディの識別氏です。*hbのリストの先頭の識別氏はルールの第一ヘッドアトムにマッチしたボディアトムを表します。

例:

((0 1 2 (3 1)))

上のS式は、collectAllRuleApplicationの結果です。
このS式の表す意味は以下の通りです。


あるワールドで一つの2ヘッドルールが適用可能です。ルールは最も高い優先度(0)を持ち、識別子1で表されます。1はソースコード上で上から2番目のルールであることを表します。
節インデックス2によって、このルールがこの識別氏で表される節に適用されることを表します。
最後のボディ識別のリストによって、ルールの第一ヘッドアトムは4番目のボディアトムに、第二ヘッドアトムは2番目のボディアトムにマッチすることを表します。

 

 


述語名/引数 (collectAllRuleApplications2 *w *r)
要約 ワールド*w上の現在の可能なNルールの適用の仕方を全て返します。
互換性 Win Unix
引数 *w [in] ワールド識別子
*r [out] 適用の仕方のリスト
成功/失敗 true  適用可能なルールが存在し、*rのマッチングに成功した。
false 上記以外
解説 *rの形式は以下の通りです。

*r = (*r0 *r2 ... *rn)

*rn = (ルール識別子 節インデックス *hb)
ルール識別子: 整数。ルールの識別子です。この識別子はルールそのものを表すオブジェクトです。
節インデックス: 0から始まる整数。ワールドの中の節の識別子。
*hb: ルールのヘッドアトムが節のどのボディアトムにマッチしたかを表すS式。ヘッドアトムがm個あるルールが適用されたときの*hbの形式は以下の通りです。

*hb = (ボディ識別子0 ボディ識別子1 ボディ識別子2 ... ボディ識別子m)
ボディ識別子h: マッチしたボディの識別氏です。*hbのリストの先頭の識別氏はルールの第一ヘッドアトムにマッチしたボディアトムを表します。

 

 


述語名/引数 (applyRule *w *r)
要約 ワールド*wに指定した方法でルールを適用します。
互換性 Win Unix
引数 *w [in] ワールド識別子
*r [in] ルールの適用の仕方を指定するリスト
成功/失敗 true  ルールの適用に成功した。
false 上記以外
解説 *rに代入するS式は、collectAllRuleApplication/2またはcollectAllRuleApplication2/2で返される適用の仕方の要素ど同形式です。