;; "Попробуйте " ?f lavor " " ?color " вино с
;; " ?body " консистенцией."
t crlf)
(retract ?col) (retract ?bod) (retract ?fla)
(retract ?task) (assert (task brand)) )
;;ПРАВИЛА, ИМЕЮЩИЕ ОТНОШЕНИЕ К ВИНУ.
;;Выбор вина по заданному описанию значений ;атрибутов.
;;Правила этой группы соответствуют этапу
;;"конкретизация решения".
;;Прежде чем предложить пользователю выбрать
;;желаемый продукт, нужно сформировать список
;;кандидатов.
;;Разработайте правило go-choose, которое
;;выбирает вино с наивысшим рейтингом, если не
;;активизируются никакие другие правила,
;;дополняющие список вин.
;;Правило soave является примером правила
;;дополнения списка новым названием вина
;;(в данном случае "soave").
;;Разработайте другие аналогичные правила.
(defrule soave (task brand)
(wine (property color) (is white))
(wine (property flavor) (is dry)
(cert ?certl)) (wine (property body) (is fine)
(cert ?cert2)) =>
(assert (wine (property brand) (is soave)
(cert (min ?certl ?cert2))))
)
;; ПРАВИЛА, ОРГАНИЗУЮЩИЕ ВЫБОР ПОЛЬЗОВАТЕЛЕМ ИЗ
;; СПИСКА.
Пользователь отвечает на выводимый запрос вводом "yes" или "по".
Разработайте правило selection, которое выбирает вино с наивысшим рейтингом и предлагает его пользователю.
Разработайте правило rejection, которое активизируется после ввода пользователем отрицательного ответа на текущее предложение.
Правило acceptance завершает текущий сеанс работы с программой, (defrule acceptance
(task choice)
(decision (re ?candidate) (is yes))
=>
(printout
t crlf
"Sir/Madam has impeccable taste "
;; "Сэр/Мадам! У вас исключительно тонкий вкус! "
t crlf) (halt) )
II) Как можно изменить стратегию поиска, например не формировать сначала весь список, а предлагать пользователю вина сразу же после формирования очередного кандидата, причем создавать их в порядке "качества" вина?