Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 有一个;“超出全局堆栈”;在序言中_Prolog_Planning_Failure Slice - Fatal编程技术网

Prolog 有一个;“超出全局堆栈”;在序言中

Prolog 有一个;“超出全局堆栈”;在序言中,prolog,planning,failure-slice,Prolog,Planning,Failure Slice,嘿,伙计们,关于序言我有一个相当简单的问题 %on(Block,Object). % clear(Object). block(b1). block(b2). block(b3). place(p1). place(p2). place(p3). place(p4). state1([clear(p2),clear(p4),clear(b2),clear(b3),on(b1,p1),on(b2,p3),on(b3,b1)]). % visual state1 % b3 % b1 b2 %

嘿,伙计们,关于序言我有一个相当简单的问题

%on(Block,Object).
% clear(Object).
block(b1).
block(b2).
block(b3).

place(p1).
place(p2).
place(p3).
place(p4).
state1([clear(p2),clear(p4),clear(b2),clear(b3),on(b1,p1),on(b2,p3),on(b3,b1)]).
% visual state1
% b3
% b1    b2
% =  =  =  =
% 1  2  3  4     <----Positions
% can(Action,Condition).
% adds(Action,AddRelationship).
% deletes(Action,DeleteRelationship).
% move(Block,From,To).
can( move( Block, From, To), [ clear( Block), clear( To), on( Block, From)]) :-
  block( Block),      % Block to be moved
  object( To),           % "To" is a block or a place
  To \== Block,          % Block cannot bå moved to itself
  object( From),         % "From" is a block or a place
  From \== To,           % Move to new position
  Block \== From.        % Block not moved from itself
adds(move(X,From,To),[on(X,To),clear(From)]).
deletes(move(X,From,To),[on(X,From),clear(To)]).
object(X):-
      place(X)
      ;   
      block(X).
% plan(State,Goals,Plan,FinalState).
plan(State,Goals,[],State):-
    satisfied(State,Goals).
plan(State,Goals,Plan,FinalState) :-
    append(PrePlan,[Action|PostPlan],Plan),
    select(State,Goals,Goal),
    achieves(Action,Goal),
    can(Action,Condition),
    plan(State,Condition,PrePlan,MidState1),
    apply(MidState1,Action,MidState2),
    plan(MidState2,Goals,PostPlan,FinalState).
% satisfied(State,[]).
satisfied(State,[Goal|Goals]):-
    member(Goal,State),
    satisfied(State,Goals).
select(State,Goals,Goal):-
    member(Goal,Goals),
    not(member(Goal,State)).
achieves(Action,Goal):-
    adds(Action,Goals),
    member(Goal,Goals).
apply(State,Action,NewState):-
    deletes(Action,DelList),
    delete_all(State,DelList,State1),!,
    adds(action,AddList),
    append(AddList,State1,NewState).
delete_all([],_,[]).
delete_all([X|L1],L2,Diff):-
    member(X,L2),!,
    delete_all(L1,L2,Diff).
delete_all([X|L1],L2,[X|Diff]):-
    delete_all(L1,L2,Diff).
(块、对象)上的
%。
%清除(对象)。
区块(b1)。
区块(b2)。
块(b3)。
地点(p1)。
地点(p2)。
地点(p3)。
地点(p4)。
状态1([清除(p2),清除(p4),清除(b2),清除(b3),打开(b1,p1),打开(b2,p3),打开(b3,b1)])。
%视觉状态1
%b3
%b1 b2
% =  =  =  =

%1 2 3 4你只需要看看这个:

plan(State,Goals,[],State):- false, satisfied(State,Goals). plan(State,Goals,Plan,FinalState) :- append(PrePlan,[Action|PostPlan],Plan), false, select(State,Goals,Goal), achieves(Action,Goal), can(Action,Condition), plan(State,Condition,PrePlan,MidState1), apply(MidState1,Action,MidState2), plan(MidState2,Goals,PostPlan,FinalState). ?- plan(state1,on(b1,b2),Plan,FinalState). 计划(状态,目标,[],状态):-false, 满足(状态、目标)。 计划(状态、目标、计划、最终状态):- 追加(预计划、[行动|后计划]、计划),false, 选择(状态、目标、目标), 实现(行动、目标), can(动作、条件), 计划(状态、条件、预先计划、中期计划1), 应用(中间状态1、行动、中间状态2), 计划(中期2、目标、后期计划、最终状态)。 ?计划(状态1,on(b1,b2),计划,最终状态)。
由于此程序已经循环,同一个程序将循环并删除附加的
false
目标。你需要先解决这个问题。有关详细信息,请参阅。

这是大量代码。你不能提供一个简单的例子来说明这个问题吗?如果你使用SWI,只需说
check。
你会得到一个警告,
adds(action)
总是会失败。你为什么这么早就调用
append
来处理所有变量参数?嘿,谢谢你的回复,看起来你完全正确,但是,由于这是我第一次“接触”prolog,我在这方面非常糟糕。你能建议我如何解决这个问题吗