CLIPS пример программы - допрос автоугонщиков
Primary tabs
Forums:
[другие примеры программ на CLIPS ]
;программа на логику высказываний. ;Следователь допрашивает четырех гангстеров по делу о похищении автомобиля и получает следующие показания: ; Джек: Если Том не угонял автомобиль, то его угнал Боб ; Боб: Если Джек не угонял автомобиль, то его угнал Том ; Фред: Если Том не угонял автомобиль, то его угнал Джек ; Том: Если Боб не угонял автомобиль, то его угнал я. ;Выяснилось, что Боб солгал, а том сказал правду. Кто угнал автомобиль? Правдивы ли показания Джека и Фреда? ; (deftemplate gangster (slot name (type SYMBOL)) (slot guilty (type SYMBOL) (default Unk)) (slot truthful (type SYMBOL) (default Unk)) ) (deffacts content (gangster (name Jack)) (gangster (name Bob)(truthful No)) (gangster (name Fred)(guilty No)) (gangster (name Tom)(truthful Yes)) ) (defrule stop (gangster (name Jack) (guilty ~Unk) (truthful ~Unk)) (gangster (name Bob) (guilty ~Unk) (truthful ~Unk)) (gangster (name Fred) (guilty ~Unk) (truthful ~Unk)) (gangster (name Tom) (guilty ~Unk) (truthful ~Unk)) => (halt) ) ;;в соответствии с показаниями Джека и Тома (defrule Jack_Tom_truthful_1 (gangster (name Jack|Tom) (truthful Yes)) (gangster (name Tom) (guilty No)) ?Bob<-(gangster(name Bob) (guilty Unk)) => (modify ?Bob(guilty Yes)) ) (defrule Jack_Tom_truthful_2 (gangster (name Jack|Tom) (truthful Yes)) (gangster (name Bob) (guilty No)) ?Tom<-(gangster(name Tom) (guilty Unk)) => (modify ?Tom(guilty Yes)) ) (defrule Jack_Tom_not_truthful (gangster (name Jack|Tom) (truthful No)) ?X<-(gangster (name Bob|Tom) (guilty Unk)) => (modify ?X(guilty No)) ) ;;в соответствии с показаниями Боба и Фреда (defrule Bob_Fred_truthful_1 (gangster (name Bob|Fred) (truthful Yes)) (gangster (name Jack) (guilty No)) ?Tom<-(gangster(name Tom) (guilty Unk)) => (modify ?Tom(guilty Yes)) ) (defrule Bob_Fred_truthful_2 (gangster (name Bob|Fred) (truthful Yes)) (gangster (name Tom) (guilty No)) ?Jack<-(gangster(name Jack) (guilty Unk)) => (modify ?Jack(guilty Yes)) ) (defrule Bob_Fred_not_truthful (gangster (name Bob|Fred) (truthful No)) ?X<-(gangster (name Jack|Tom) (guilty Unk)) => (modify ?X(guilty No)) ) ;;Выясняем кто говорит правду, а кто нет (defrule Jack_Tom_is_truthful ?X<-(gangster(name Jack|Tom) (truthful Unk)) (gangster(name Tom|Bob) (guilty Yes)) => (modify ?X(truthful Yes)) ) (defrule Jack_Tom_is_not_truthful ?X<-(gangster(name Jack|Tom) (truthful Unk)) (gangster(name Tom) (guilty No)) (gangster(name Bob) (guilty No)) => (modify ?X(truthful No)) ) (defrule Bob_Fred_is_truthful ?X<-(gangster(name Bob|Fred) (truthful Unk)) (gangster(name Tom|Jack) (guilty Yes)) => (modify ?X(truthful Yes)) ) (defrule Bob_Fred_is_not_truthful ?X<-(gangster(name Bob|Fred) (truthful Unk)) (gangster(name Tom) (guilty No)) (gangster(name Jack) (guilty No)) => (modify ?X(truthful No)) )
- Log in to post comments
- 10478 reads