<условный-элемент-not>::= (not <условный-элемент>)
Условный элемент not может отрицать только одно выражение. Несколько условных элементов нужно отрицать с помощью нескольких элементов not. Тщательно следите за комбинациями not с or или and; результат не всегда очевиден!
Пример 6.30. Применение условного элемента not
(defrule high-flow-rate
(temp high)
(valve open)
(not (error-status confirmed))
=>
(printout t "Recommend closing of valve due to high temp" crlf))
В логическом элементе not можно использовать связанные переменные, так же как и в других условных элементах:
Пример 6.31. Правило check-value
(defrule check-valve
(check-status?valve)
(not (valve-broken?valve))
=>
(printout t "Device "?valve " is OK" crlf))
С помощью условного элемента not можно, наконец, довести до совершенства наше правило Find-2-coeval-Person, последняя версия которого была приведена в разд. 6.5.1. Если вы помните, это правило выводит всевозможные пары персон одинакового возраста. Чтобы данное правило не выводило эквивалентные по смыслу пары имен (например, Bob-Sue и Sue-Bob), преобразуем нашу программу следующим образом: