1

Prologについて助けが必要です。コードを投稿しましたが、問題は期待した結果が得られないことです。可能になるまで、すべてのブロックをテーブル上で移動するためのアクションを計画したいと考えています。これを行うには、次のプロンプトを表示します。

?- do(while(some(x, block(x) & -onTable(x)),pi(x,putOnTable(x))),s0,S).

次のような応答が表示されることを期待しています。

S = do(putOnTable(e), do(putOnTable(b), do(putOnTable(c), s0)))

ただし、Prolog は「false」のみを返します。誰かが私を助けることができますか??

% Golog interpreter
%:- [golog_swi].

:- discontiguous clear/2, on/3, onTable/2.

:- op(800,xfy,[&]).

do(E,S,do(E,S)):- primitive_action(E),poss(a,S).

% Primitive Action Declarations.
primitive_action(putOn(_,_)).
primitive_action(putOnTable(_)).


poss(putOn(X,Y),S) :- clear(X,S), clear(Y,S), \+ on(X,Y,S), \+ X=Y.
poss(putOnTable(X),S):- clear(X,S), \+(onTable(X,S)).

% Successor State Axioms.
on(X,Y,do(A,S)):- A = putOn(X,Y); on(X,Y,S), \+ (A = putOnTable(X); A = putOn(X,_)).
onTable(X,do(A,S)) :- A = putOnTable(X); onTable(X,S), \+ A= putOn(X,_).
clear(X,do(A,S)) :- on(Y,X,S), (A = putOn(Y,_) ; A = putOnTable(Y)); clear(X,S), \+ A = putOn(_,X).

% Restore suppressed situation arguments
restoreSitArg(onTable(X),S,onTable(X,S)).
restoreSitArg(on(X,Y),S,on(X,Y,S)).
restoreSitArg(clear(X),S,clear(X,S)).

block(X):- member(X,[a,b,c,d,e]).

% iniTial COndition
onTable(a,s0).
on(b,a,s0).
on(c,b,s0).
clear(c,s0).
onTable(d,s0).
on(e,d,s0).
clear(3,s0).

ありがとうございました!!!

4

2 に答える 2

1

クエリで目標が失敗するため、述語do/3は成功しません。primitive_action/1

現在、 にwhile/2は記載されておらずprimitive_action/1、あなたのプログラムからも欠落しているようです。したがってprimitive_action/1、さらに事実を拡張するか、新しいルールを に追加する必要がありますdo/3。それに加えて、意味を説明する必要がありますwhile/2

于 2012-07-24T12:13:45.703 に答える
1

この質問は実際には Golog に関するものです。あなたの間違いはかなりありふれたものです.Gologインタープリターコードをソースファイル/ディレクトリにコピーしていません.

Golog では、ここで使用される while ループや非決定論的ピック (pi) など、多くの高レベルのプログラミング構造が定義されています。Golog を再発明したくないと思うので、すぐに入手してください。あなたの質問はある種の課題の一部であり、先生はおそらく Golog インタープリターを指していると思います。それ以外の場合は、大学の認知ロボティクス グループのページでいつでも見つけることができます。トロント: http://www.cs.toronto.edu/cogrobo/main/systems/index.html

于 2013-12-18T01:18:10.523 に答える