Как обновить факты в Jess Rules Engine?

Предположим, что в Jess моя база фактов состоит из нескольких пар «имя-значение», таких как

(node1 6.5) (node2 100) (node3 0.5)

Как я могу «обновить» значения, например, значение «node1» с 6,5 до 100, не удаляя его вручную?

Кроме того, есть ли способ «подтвердить» все факты после запуска определенного правила?


person Damm Joe    schedule 25.09.2019    source источник


Ответы (1)


Вы используете функцию Джесс (modify) для изменения фактов. Как объясняется в руководстве, упорядоченные факты, такие как (node1 6.5), внутренне представлены как неупорядоченные факты с одним слотом с именем __data, поэтому вы можете использовать это знание для их изменения:

Jess> (assert (node1 6.5))
<Fact-0>
Jess> (modify 0 (__data 7.5))
<Fact-0>
Jess> (facts)
f-0   (MAIN::node1 7.5)
For a total of 1 facts in module MAIN.

Теперь, учитывая все это, для эффективности я бы по-прежнему рекомендовал вам использовать неупорядоченный шаблон, например

(node (slot index) (slot value))

чтобы ваши факты выглядели

(node (index 1) (value 6.5))
(node (index 2) (value 100))

Что касается вашего последнего вопроса: я не совсем понимаю, что вы имеете в виду, но вы можете поискать конструкцию (deffacts) и функцию (reset) и посмотреть, сделают ли они вместе то, что вам нужно.

person Ernest Friedman-Hill    schedule 25.09.2019
comment
Спасибо! Мой последний вопрос касался того факта, что JESS деактивирует факты после того, как они были использованы для активации правила. Для моих целей было бы полезно, если бы факты всегда были активны. Например, я запускаю правило для фактов A и B, а после этого вставляю еще один факт C. Правило, которое сработало бы для A и C, теперь не сработает, потому что A каким-то образом уже используется. Я не понимаю, почему это так. - person Damm Joe; 25.09.2019
comment
Факты не «деактивируются», но заданный набор фактов будет использоваться для активации заданного правила только один раз. Тем не менее, изменение любого из фактов сделает правило пригодным для повторного запуска. - person Ernest Friedman-Hill; 25.09.2019
comment
Для моей цели мне нужны факты, представляющие какое-то состояние системы, и для этого мне может понадобиться один и тот же факт для разных правил. Это доступно в Джесс? - person Damm Joe; 25.09.2019