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