Prolog:递增变量

Prolog: incrementing variable

我是学习序言的初学者。我在执行此操作时遇到了一些问题:我想创建一个全局变量并递增该变量。我是这样做的:

assert(X,10).
inc(X,Y):- Y is X+1.

但是我有这个错误:

   ERROR: is/2: Arguments are not sufficiently instantiated 

一般来说,在 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).