【问题标题】:Prolog error in loop循环中的 Prolog 错误
【发布时间】:2012-07-24 11:09:27
【问题描述】:

我需要有关 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).

谢谢!!!

【问题讨论】:

    标签: prolog golog


    【解决方案1】:

    您的谓词do/3 无法成功,因为目标primitive_action/1 将因您的查询而失败。

    目前,while/2 未在 primitive_action/1 中描述,而且您的程序似乎也缺少它。因此,您需要通过进一步的事实来扩展primitive_action/1,或者向do/3 添加新规则。除此之外,您还需要描述while/2 的含义。

    【讨论】:

    • 我尝试为 : 和 while 添加这些定义,但结果始终相同.... % : 定义 do(E1 : E2,S,S1) :- do(E1,S, S1),做(E2,S,S1)。 % while 定义 do(while(P,E),S,S1) :- do(star(?(P) : E) : ?(-P),S,S1)。其他建议?请!!!
    【解决方案2】:

    这个问题其实是关于 Golog 的。你的错误很普通:你没有将 Golog 解释器代码复制到你的源文件/目录中。

    Golog 定义了许多在这里使用的高级编程结构,包括 while 循环和非确定性选择 (pi)。我确定你不想重新发明 Golog,所以去吧。我假设您的问题是某种作业的一部分,您的老师可能会将您指向 Golog 解释器。否则,您总是可以在大学认知机器人小组的页面上找到它。多伦多:http://www.cs.toronto.edu/cogrobo/main/systems/index.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多