2012-07-24 4 views
1

프롤로그에 대한 도움이 필요합니다. 코드를 게시했는데 예상 한 결과를 얻지 못하는 것이 문제입니다. 가능한 모든 테이블을 이동하는 작업을 계획하고 싶습니다. 이 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). 

감사합니다!

답변

1

목표 primitive_action/1이 (가) 쿼리에 실패하므로 사용자의 조건 자 do/3은 성공할 수 없습니다.

현재 while/2primitive_action/1에 설명되어 있지 않으며 프로그램에서도 누락 된 것으로 보입니다. 따라서 primitive_action/1을 추가로 확장하거나 do/3에 새 규칙을 추가해야합니다. 그리고 그 외에도 while/2의 의미를 설명해야합니다.

+0

나는 이러한 정의를 추가하는 tryed :하면서하지만 항상 결과는 같은 .... %입니다 : 할 (E1 : E2, S, S1) : 정의 - DO (E1 , S, S1), do (E2, S, S1)를 포함한다. ((P, E), S, S1 동안) : do (별표 (?)) : E (- P), S, S1). 다른 제안 사항이 있으십니까? 부디!!! – angelius

1

이 질문은 실제로 Golog에 관한 것입니다. 당신의 실수는 꽤 평범한 것입니다 : 당신은 소스 파일/디렉토리에 Golog 인터프리터 코드를 복사하지 않았습니다.

Golog는 여기서 사용되는 while 루프와 non-deterministic picks (pi)를 포함하는 많은 고급 프로그래밍 구문을 정의합니다. 나는 당신이 Golog를 재발견하고 싶지 않기 때문에 그냥 가서 그것을 얻으 리라 확신합니다. 저는 여러분의 질문이 일종의 임무 중 하나라고 가정하고 있습니다. 그리고 선생님이 아마 Golog 해석가에게 당신을 가리키고있을 것입니다. 그렇지 않으면 Univ.의인지 로봇 공학 그룹 페이지에서 항상 찾을 수 있습니다. 토론토의 : http://www.cs.toronto.edu/cogrobo/main/systems/index.html