0

我只想断言一些事实——如果它们还没有被断言,所以我做一个检查:

:- 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

我做错了什么?对不起菜鸟问题,但我对序言真的很陌生!

4

1 回答 1

0

我试图在在线 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另一个模块中定义,这会导致一些问题吗?

于 2012-12-14T16:41:23.140 回答