Как обновить факты в Jess Rules Engine? - PullRequest
1 голос
/ 25 сентября 2019

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

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

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

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

1 Ответ

1 голос
/ 25 сентября 2019

Вы используете функцию Джесса (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) и посмотреть, будут ли они вместе делать то, что вам нужно.

...