CLIPS多个和

时间:2012-05-02 21:25:46

标签: clips

让我们说我有这样的规则:

(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)))

如何添加新的&#34;和&#34;? 谢谢。

1 个答案:

答案 0 :(得分:0)

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

 (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)))))