Возможно, вы ожидаете, что функция if выполнит сопоставление с образцом, чтобы определить, существует ли факт (production-is medium) или (production-is high).Это не сработает, потому что функция if похожа на другие языки, такие как Java и C, где функция ожидает выражения для оценки (например, вызов функции или переменная).В ваших операторах if выражения (production-is medium) и (production-is high) являются вызовами функций, а поскольку у вас нет объявленной функции production-is, вы получите сообщение об ошибке.
Youследует разделить ваше исходное правило на два правила:
(defrule accept-location-lessthan-path-medium
(geological-survey-lessthan-path-is stable | Stable)
(production-is medium)
=>
(assert (medium-outcome))
(printout t "Second best" crlf))
(defrule accept-location-lessthan-path-high
(geological-survey-lessthan-path-is stable | Stable)
(production-is high)
=>
(assert (ideal-location))
(printout t "Accepted! The location is ideal; you can start building now! :)" crlf))