意外的未定义过程

时间:2012-12-14 00:49:32

标签: prolog

我想只断言一些事实 - 如果它们尚未被断言,那么我会检查一下:

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

我做错了什么?很抱歉没有问题,但我真的很新道具!

1 个答案:

答案 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,这会导致一些问题?