2012-12-14 6 views
0
나는 그들이 아직 주장하지 않은 경우에만 once- 몇 가지 사실을 주장 할, 그래서 확인을

:예기치 않은 정의되지 않은 절차

:- dynamic item/6. 

init(Id, LastId, Depth) :- 
         ruut(X,Y,Color), 
         (item(X,Y,Color,Depth,Id,LastId) -> true;  
         assert(item(X,Y,Color,Depth,Id,LastId))), 
         fail. 

init(_, _, _). 

점은 아직 주장되지 않은 경우에만 그것을 주장하는 것입니다 . 그러나 오류가 발생합니다 :

ERROR: my_pgm:initsialiseeri_seisund/3: Undefined procedure: my_pgm:item/6 

내가 뭘 잘못하고 있니? 죄송합니다 멍청한 질문에 대한,하지만 난 정말 프롤로그에 새로운입니다!

+0

그 밖의 코드는 무엇입니까? 'ruut()'에서'X'와'Y'의 값을 초기화합니까? else 문을 거치지 않고'(\ + item (...) -> assert (...)) 할 수있다. – Rubens

+0

작동하는 것처럼 보입니다 ... 당신은 모든 루터/3에 대해 6 점을 아이템으로 주장하고 있습니까? – CapelliC

+0

예, 알고 있습니다 –

답변

0

나는이 오류를 online SWI-Prolog에 재현하려고 시도했으며 매력적으로 작동합니다.

:- dynamic foo/1. 

lower(X,X). 
lower(X,U):- X is U-1. % duplicate 
lower(X,U):- U > 0, U1 is U-1, !, lower(X, U1). 

init(U):- 
    lower(X,U), 
    \+(foo(X)), assert(foo(X)), 
    fail; !, true. 

show_all:- 
    foo(X), print(X), nl, fail; !, true. 

:- init(5), show_all. 

어쩌면 당신은 일부 모듈을 남용 유무 : 여기에 코드를 내 샘플입니다? 나는. 하나의 모듈에 init/6을 정의하고 다른 모듈에 assert/1을 정의했는데 이로 인해 문제가 발생합니까?

관련 문제