Как бы вы структурировали альфа-узлы в сети Rete, в которой есть правило с двумя условиями, найденными в других правилах?

Допустим, у меня есть три правила:

  1. Когда свойство объекта foo равно 1, вывод foo
  2. Когда свойство панели объекта равно 1, панель вывода
  3. Когда свойство объекта foo равно 1, а свойство bar равно 1, выведите как foo, так и bar

Как будет выглядеть структура альфа-узлов для этого сценария? Я видел примеры, когда с учетом правил 1 и 2 это могло бы выглядеть так:

      foo == 1 - "foo"
root<
      bar == 1 - "bar"

И, учитывая 3:

root - foo == 1 - bar == 1 - "both foo and bar"

И, учитывая 3 и 1:

                  "foo"
root - foo == 1 <
                  bar == 1 - "both foo and bar"

Учитывая 3, 2 и 1, будет ли это выглядеть примерно так:

       foo == 1 - "foo"
root <           
                  "bar"
       bar == 1 < 
                  foo == 1 - "both foo and bar"

or

       foo == 1 - "foo"
     /
root-- bar == 1 - "bar"
     \
       foo == 1 - bar == 1 - "both foo and bar"

Или каким-то другим способом?


person mrryanjohnston    schedule 10.07.2020    source источник


Ответы (1)


Если вы делитесь узлами и сохраняете порядок проверки свойств, это будет выглядеть так:

       bar == 1 - "bar"
root <           
                  "foo"
       foo == 1 < 
                  bar == 1 - "both foo and bar"
person Gary Riley    schedule 13.07.2020