CLIPS принимает польскую / префиксную нотацию. Поэтому ваше правило должно быть написано следующим образом.
(defrule check-for-hot-oil-too-long-warning
(oil-is-too-hot-too-long (Variable ?variable) (Duration ?duration))
(test (and (eq ?variable "Oil Temp")
(>= ?duration 600)))
=>
(printout t "Warning! Check engine light on!" tab ?*oil-too-hot-times* crlf))
Также обратите внимание, что для типа STRING
требуются двойные кавычки "
.
Тем не менее, я бы посоветовал вам использовать альфа-сетевое согласование движка, которое является более кратким и эффективным.
(defrule check-for-hot-oil-too-long-warning
(oil-is-too-hot-too-long (Variable "Oil Temp") (Duration ?duration))
(test (>= ?duration 600))
=>
(printout t "Warning! Check engine light on!" tab ?*oil-too-hot-times* crlf))
Движок сразу видит, что ваш слот Variable
является константой, и может соответствующим образом оптимизировать логику сопоставления. Я не уверен, что он может сделать то же самое в рамках совместного испытания.