1

假设我有这样的规则:

(defrule get_next_N_poz
    ?id <- (get_next_poz $?)
    (world (limit $?) (ball ?b1 ?b2) (men $? ?x ?y - $?) (id ?))

    (and
    (test (= ?x ?b1))
    (test (= ?y (- ?b2 1))))
        => 
        (printout t "north ready position:" ?x ?y)
        (modify ?id (get_next_poz 1)))

如何添加新的“和”?谢谢你。

4

1 回答 1

1

这取决于您要实现的逻辑。无论如何,现有的你拥有的都是多余的,但如果你想要第二个,你只需在最后一个结束后添加它:

 (and
    (test (= ?x ?b1))
    (test (= ?y (- ?b2 1))))

 (and
    (test (= ?x ?b2))
    (test (= ?y (+ ?b1 1))))

如果你想要这些条件中的一个或另一个,你会这样做:

 (or (and
       (test (= ?x ?b1))
       (test (= ?y (- ?b2 1))))

    (and
       (test (= ?x ?b2))
       (test (= ?y (+ ?b1 1)))))

您可以在单个测试条件元素中使用和/或布尔函数,而不是使用和/或条件元素:

 (test (or (and (= ?x ?b1)
                (= ?y (- ?b2 1)))
           (and (= ?x ?b2)
                (= ?y (+ ?b1 1)))))
于 2012-05-20T22:37:34.787 回答