我是学习prolog的初学者。我有一些问题要做:我想创建一个全局变量并递增此变量。我这样做了:
assert(X,10).
inc(X,Y):- Y is X+1.
但我有这个错误:
ERROR: is/2: Arguments are not sufficiently instantiated
答案 0 :(得分:0)
一般来说,在Prolog中最好完全避免global variables。但如果你非常需要它们......
:- dynamic my_counter/1.
my_counter(10).
increment :-
retract(my_counter(C)),
succ(C, C1) /* or C1 is C+1 */,
assertz(my_counter(C1)).
SWI-Prolog有一个我今天见过的成语:flag / 3
来自pl-fcgi简介,一个用于fastcgi服务器的高性能全局计数器
service_request :-
flag(count, N, N+1), ...
要知道该值,可以使用
?- flag(count, C, C).