PyKE での継承がどのように機能するかを理解しようとしています。それがどのように機能するかについて私が見つけた唯一の情報はここにあります:
拡張句 オプションの拡張句を使用する場合は、ファイルの最初の行です。これは、このルール ベースが継承する親ルール ベースを定義します。また、この継承から除外する後方連鎖のゴール名のリストを指定することもできます。
奇妙なことに例がないように見えるので、明らかな何かが欠けていると思います。だから今、私はこの問題に遭遇しました: 親ルールベースbc_rules_fields_abstract_base.krbと、そのbc_rules_fields_problem_report.krbから継承するルールベースがあります。すべてのルールは親ルールベースにあり、1 つの追加ルールはbc_rules_fields_problem_report.krbにあります。
私が何をしても、パイクはいつも主張します
File "C:...\Python38\lib\site-packages\pyke\knowledge_engine.py", line 244, in get_kb
else: raise KeyError("knowledge_base %s not found" % kb_name)
KeyError: 'knowledge_base bc_rules_fields_problem_report not found'
コンパイルのためにそれを検出するようですが:
writing [compiled_krb]/compiler_bc.py
writing [compiled_krb]/allowed_states.fbc
writing [compiled_krb]/bc_rules_fields_abstract_base_bc.py
writing [compiled_krb]/bc_rules_fields_problem_report_bc.py
writing [compiled_krb]/compiled_pyke_files.py
bc_rules_fields_problem_report.krbの最初の行は、ドキュメントに記載されているとおりです。
extending bc_rules_fields_abstract_base
"extending non_existent_rule_base_jibberish_bla_bla" のようなジベルを書くと、次のエラーが表示されます (少なくとも構文が正しいように見えることを示しています)。
KeyError: 'rule_base bc_rules_fields_problem_report: parent non_existent_rule_base_jibberish_bla_bla not found'
私が書いた評価を開始するには:
# Compile and load .krb files in same directory that I'm in (recursively).
self.engine = knowledge_engine.engine(__file__)
self.engine.activate('bc_rules_fields_problem_report')
# Routine to populate the factbase
self._add_facts_actual_state_fields()
goal_string = 'bc_rules_fields_problem_report.ticketcheck_field_ok($field, $comment)'
with self.engine.prove_goal(goal_string, args={}) as gen: # <- This is where the error occurs.
for vars, plan in gen:
raw_check_results[vars['field']] = vars['comment']
基本的に、bc_rules_fields_abstract_base .krb のルールを常に適用し、さらに bc_rules_fields_ problem_report .krbのようないくつかの特定のルールを適用したいと考えています。誰かがこれを行う方法の手がかりや少なくとも例を持っていますか?