2015-09-23 3 views
1

Я начинаю изучать пролог. У меня есть некоторые проблемы для этого: я хочу создать глобальную переменную и увеличить эту переменную. Я сделал так:Пролог: приращение переменной

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

Но у меня есть эта ошибка:

ERROR: is/2: Arguments are not sufficiently instantiated 
+0

вы соберетесь в очень императивный способ присвоений. В Prolog переменная не должна изменяться, но она относится к другой переменной. В этом случае вы определяете предикат su (X, Y): - X равно Y + 1. Тогда запрос будет su (10, Z). В любом случае, арифметика, вероятно, не самый простой способ начать. Есть такие вводные книги, как Clocksin & Mellish: Programming in Prolog, но другие, упомянутые в 8-м ответе [comp.lang.prolog FAQ] (http://www.metalevel.at/faq/faq.html), также должны быть в порядке , –

ответ

0

Вообще, в Прологе это лучше избегать всех 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). 
+0

он работает. Спасибо ! – blinkettaro

Смежные вопросы