Prolog 序言:递增变量

Prolog 序言:递增变量,prolog,global-variables,Prolog,Global Variables,我是学习序言的初学者。我有一些问题要做:我想创建一个全局变量并递增这个变量。我是这样做的: assert(X,10). inc(X,Y):- Y is X+1. 但我有一个错误: ERROR: is/2: Arguments are not sufficiently instantiated 一般来说,在Prolog中最好避免使用。但是如果你非常需要它们 :- dynamic my_counter/1. my_counter(10). increment :- retract

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

assert(X,10).
inc(X,Y):- Y is X+1.
但我有一个错误:

   ERROR: is/2: Arguments are not sufficiently instantiated 

一般来说,在Prolog中最好避免使用。但是如果你非常需要它们

:- 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有一个我今天看到使用过的成语:/3

来自intro,fastcgi服务器的高性能全局计数器

service_request :-
    flag(count, N, N+1), ...
要知道值,可以使用

?- flag(count, C, C).

一般来说,在Prolog中最好避免使用。但是如果你非常需要它们

:- 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有一个我今天看到使用过的成语:/3

来自intro,fastcgi服务器的高性能全局计数器

service_request :-
    flag(count, N, N+1), ...
要知道值,可以使用

?- flag(count, C, C).

你正在以一种非常紧迫的方式思考任务。在Prolog中,一个变量不应该改变,但它与另一个变量相关。在本例中,您将定义一个谓词suc(X,Y):-X是Y+1。然后,查询将是suc(10,Z)。无论如何,算术可能不是最简单的开始方式。有一些介绍性的书籍,如Clocksin&Mellish:Prolog中的编程,但在第8个答案中提到的其他书籍也应该可以。你在以一种非常紧迫的方式思考作业。在Prolog中,一个变量不应该改变,但它与另一个变量相关。在本例中,您将定义一个谓词suc(X,Y):-X是Y+1。然后,查询将是suc(10,Z)。无论如何,算术可能不是最简单的开始方式。有一些介绍性的书籍,如Clocksin&Mellish:Prolog中的编程,但在本教程的答案8中提到的其他书籍也可以。