Правило клипов для объекта, входящего в бесконечный цикл после изменения содержимого внутри него - PullRequest
0 голосов
/ 24 апреля 2019

Я увеличиваю переменную внутри объекта клипов на некоторое число в RHS.

Правило работает, но входит в бесконечный цикл.

Я попытался запустить его без изменения переменной внутри объекта, он входит в RHS один раз, но с изменением он входит в цикл.

(defrule modify
        "modify"
        (step 0)
        ?EA <- (object (is-a ALERT)
                (ID                      ?RID&:(or(eq ?ID "R") (eq ?RID "Q")))
                (TIME                     ?T)
        )
        =>
        (bind ?time (send ?EA get-TIME))
        (bind ?newTime (+ 86399 ?time))
        (send ?EA put-TIME ?newTime)
        (log_info (str-cat "old time is " ?time ", new time is " ?newTime "event time is " (send ?EA get-TIME)))
)

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

Спасибо.

1 Ответ

0 голосов
/ 24 апреля 2019

Удаление слота на LHS, которое мы увеличиваем на RHS, исправило это.

(defrule modify
        "modify"
        (step 0)
        ?EA <- (object (is-a ALERT)
                (ID                      ?RID&:(or(eq ?ID "R") (eq ?RID "Q")))                
        )
        =>
        (bind ?time (send ?EA get-TIME))
        (bind ?newTime (+ 86399 ?time))
        (send ?EA put-TIME ?newTime)
        (log_info (str-cat "old time is " ?time ", new time is " ?newTime "event time is " (send ?EA get-TIME)))
)

Если мы сохраняем ВРЕМЯ слота в LHS, после изменения / приращения правило снова запускается, и оноидет в цикле.

...