Prolog:递增变量

时间:2015-09-23 12:53:33

标签: prolog global-variables

我是学习prolog的初学者。我有一些问题要做:我想创建一个全局变量并递增此变量。我这样做了:

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

但我有这个错误:

   ERROR: is/2: Arguments are not sufficiently instantiated 

1 个答案:

答案 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).