Я ищу способ удалить факты, основанные на отрицательном состоянии. Например, после создания следующих фактов: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)
)
Это должно удалить автомобили с пятью дверями и цвет не зеленый. Поэтому идентификаторы f-6 и f-8 следует удалить. И распечатайте факты, которые были удалены.
Заявление не дает мне ошибку, но если я запустил (запустил), он не отменил или не распечатал заявление. Я предполагаю, что это не правильно, но я не вижу, как написать это отрицательное условие в противном случае.
Благодаря
Вы можете также использовать цвет & ~ зеленый в исходном правиле?. С помощью & добавлено значение в первой позиции факта связано с цветом, а первая позиция не должна быть зеленой. Без цвета &,? Привязывается к первой позиции в этом факте, а вторая позиция не должна быть зеленой. –
благодарит Гэри за понимание. В конце концов я получу его :-) – Selrac