0
我正在尋找一種基於否定條件刪除事實的方法。例如創建以下事實後:CLIPS負面條件
CLIPS>
(deffacts Cars
(color red)
(color green)
(color yellow)
(doors three)
(doors five))
CLIPS>
(defrule combinations
(color ?color)
(doors ?doors)
=>
(assert (car ?color ?doors)))
CLIPS> (reset)
CLIPS> (run)
CLIPS> (facts)
f-0 (initial-fact)
f-1 (color red)
f-2 (color green)
f-3 (color yellow)
f-4 (doors three)
f-5 (doors five)
f-6 (car red five)
f-7 (car green five)
f-8 (car yellow five)
f-9 (car red three)
f-10 (car green three)
f-11 (car yellow three)
For a total of 12 facts.
CLIPS>
我期待在刪除部分用下面的語句的事實:
(defrule clear
?q1 <- (car ?color~green five)
=>
(retract ?q1)
(printout t "Cars cleared " ?q1 crlf)
)
這應該刪除汽車行駛五兩扇門和顏色不是綠色的。因此應刪除ID f-6和f-8。並打印已刪除的事實。
該聲明不會給我一個錯誤,但如果我執行(運行)它不收回或打印出聲明。我猜測情況並不正確,但我不知道如何寫這種否定的條件。
感謝
你也可以用你的原始規則顏色&〜綠?用&添加的值在事實的第一個位置必然是?顏色,第一個位置不能是綠色。如果沒有&,?顏色就會被綁定到事實上的第一個位置,而第二個位置不能是綠色的。 –
感謝加里給你的見解。我最終會得到它的竅門:-) – Selrac