프롤로그에 대한 도움이 필요합니다. 코드를 게시했는데 예상 한 결과를 얻지 못하는 것이 문제입니다. 가능한 모든 테이블을 이동하는 작업을 계획하고 싶습니다. 이 I 프롬프트를 수행합니다루프의 프롤로그 오류
?- 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)))
하지만 프롤로그는 "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).
감사합니다!
나는 이러한 정의를 추가하는 tryed :하면서하지만 항상 결과는 같은 .... %입니다 : 할 (E1 : E2, S, S1) : 정의 - DO (E1 , S, S1), do (E2, S, S1)를 포함한다. ((P, E), S, S1 동안) : do (별표 (?)) : E (- P), S, S1). 다른 제안 사항이 있으십니까? 부디!!! – angelius