在 Jess Tab /Protege 中使用 slot-insert$

Using slot-insert$ in Jess Tab /Protege

Jess 选项卡中的以下代码连续将同一实例插入到多值槽中。

(defrule satisfactibleEstudio
    (object (is-a Estudio)
        (OBJECT ?user)
        (nombre ?name)
        (preferencias_minimas ?pref))

    (object (is-a Chalet)
        (OBJECT ?viv)
        (precio ?p&: (and
                        (>= ?p (slot-get ?pref precio_minimo))
                        (<= ?p (slot-get ?pref precio_maximo))))
        (tamanno ?t&: (and
                        (>= ?t (slot-get ?pref tamanno_minimo))
                        (<= ?t (slot-get ?pref tamanno_maximo))))
        (componentes $?comp&: (>= (get-dorms $?comp) (slot-get ?pref dormitorios))))
=>
    (slot-insert$ ?user satisfactibles 1 ?viv))

但是,如果我用打印输出替换 slot-insert$ 函数,它会按预期工作。我做错了什么?

更新: 很明显它不断地将同一个实例插入插槽中,但是打印输出每次匹配只打印一次。

查看右边关于修改事实的Jess手册:

如果规则包含声明 (declare (no-loop TRUE)),则触发时规则所做的任何事情都不会导致同一规则立即重新激活;即,如果无循环规则匹配一个事实,并且该规则修改了相同的事实使得该事实仍然匹配,则该规则将不会被放回议程,从而避免无限循环。