Увеличивайте или изменяйте переменную каждый раз, когда срабатывает правило Джесса.

Есть ли способ увеличить или изменить значение некоторой переменной при каждом срабатывании правила? Мне нужно, чтобы каждый раз при срабатывании правила вводилось новое значение слота, так как я буду использовать это значение для связи в следующем примере: у меня есть электрическая цепь и правило, которое преобразует дельту в звезду. Для каждого продукта преобразования есть дополнительный узел. Для простой сети я назвал ее T, но для более сложной сети я получаю сеть, полную T узлов, поскольку каждый раз, когда правило срабатывает для другой дельты, я получаю T узел.


person Sanja    schedule 30.11.2017    source источник
comment
Вам нужна одна переменная для всех правил или одна переменная для одного правила или переменные для определенных правил? Должны ли переменные быть слотами факта или это неудобно? -- Я не понимаю большей части того, что вы написали, но, вероятно, это все равно несущественно, а важная информация отсутствует.   -  person laune    schedule 01.12.2017
comment
Мне нужна одна переменная, которая будет увеличиваться при срабатывании определенного правила, которое будет находиться в правой части правила. Это всего лишь справочная переменная, которая будет использоваться для заполнения некоторых значений слотов.   -  person Sanja    schedule 01.12.2017


Ответы (1)


У Джесс есть переменные особого типа: глобальные переменные. Они видны во всех частях программы, включая правые части правил. Для создания используйте defglobal, например.

(defglobal ?*firecount* = 0)

Обратите внимание, что звездочки обязательны.

Вы используете их так же, как и любую другую переменную:

(++ ?*firecount*)
(printout t "fire counter = " ?*firecount* crlf)

Обратите внимание, что даже reset не очищает глобальную переменную. - Дополнительную информацию см. в руководстве Jess.

person laune    schedule 01.12.2017