КЛИПЫ 6.3 ЕСЛИ Заявление - PullRequest
       8

КЛИПЫ 6.3 ЕСЛИ Заявление

0 голосов
/ 12 декабря 2018

Я работаю над проектом и хотел бы узнать, почему мое утверждение if не работает.Мой код следующий:

(defrule accept-location-lessthan-path
(or (geological-survey-lessthan-path-is stable) (geological-survey-lessthan-path-is Stable))
=>
(if (production-is medium)
then
(assert (medium-outcome))
(printout t "Second best "crlf)
else
(if (production-is high)
(assert (ideal-location))
(printout t "
Accepted! The location is ideal; you can start building now! :) " crlf))))

Ошибка, которую он мне дает, отсутствует (отсутствует объявление функции для production-is).Может кто-нибудь посоветовать мне, в чем проблема.Спасибо.

1 Ответ

0 голосов
/ 12 декабря 2018

Возможно, вы ожидаете, что функция 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))
...