2016-11-22 2 views
0

Как я могу сделать условное правило в клипах, чтобы найти выходCLIPS условное правило

Например

(deftemplate holiday 
(slot hotel (allowed-symbols nice good poor)) 
(slot weather (allowed-symbols sunny raining)) 
) 
(deftemplate output 
(slot option (allowed-symbols go plan stay)) 
) 

Whith это это, как мы создаем правила, как

if hotel = poor then stay 
if hotel = poor and weather = raining then stay 
if (hotel = poor and weather = sunny) or (hotel = good and weather = raining) then plan 

Спасибо

ответ

1
(defrule hotel-rule1 
     (holiday (hotel ?hotel&:(eq ?hotel poor))) 
     => 
     (assert (output (option stay))) 
    ) 

(defrule hotel-rule2 
     (holiday (hotel ?hotel&:(eq ?hotel poor)) (weather ?weather&:(eq ?weather raining))) 
     => 
     (assert (output (option stay))) 
    ) 

Я бы разделил условие «или» вашего последнего правила на два разных правила, аналогично тому, что я написал.

Bye Nic

+0

Спасибо Nic. Я получаю сообщение об ошибке: [EXPRNPSR3] Отсутствует объявление функции для параметра. Я делаю что-то неправильно? – Selrac

+0

Извините, он работает. Я не копировал ваш код правильно. Спасибо – Selrac

+0

Вы можете напрямую сопоставлять константы, а не привязывать переменную и делать вызов функции eq. Например, вместо (праздник (отель? Hotel & :(eq? Hotel poor)) (погода? Погода и :(погодный дождь)), использование (праздник (отель бедный) (погодный дождь)) –

Смежные вопросы