我想只断言一些事实 - 如果它们尚未被断言,那么我会检查一下:
:- 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 :(得分: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
,这会导致一些问题?