1

ロボット システムのナレッジ ベースを書いています。システムは、実際には 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)など) のリストを生成することですが、これが最善の方法であるかどうかはわかりません。

何か案は?

4

1 に答える 1

3

述語の宣言が必要です。ディレクティブ:- dynamic(canSee/1).または次のようなルールのいずれかcanSee(_):-false.

于 2014-11-10T11:05:43.950 に答える