ロボット システムのナレッジ ベースを書いています。システムは、実際には 2 つの部分で構成されています。KB のルールと、センサーの読み取りによって生成された一連の述語です。
たとえば、可能なルールは次のとおりです。
do(stop) :- obstacleDist(N), N<1.
do(shoot(E)) :- canSee(E), enemy(E).
検知システムは、次のような述語を生成します。
canSee(plane).
obstacleDist(3.5).
ワークフローは、センサーによって生成された述語を参照し、ルール エンジンを参照してから、何をすべきかを問い合わせることで構成されます。(つまり do(X))
問題は、(たとえば) canSee述語がセンサーによって生成されない場合、ルールdo(shoot(E))を見たときにプロローグが未定義の手順について文句を言うことです。
考えられる回避策は、ルールで基本述語 ( canSee(nothing)など) のリストを生成することですが、これが最善の方法であるかどうかはわかりません。
何か案は?