Доброго времени суток! Я думаю для понимающих этот язык это будет более чем просто. Вот код программы: | Код | ;;;=============================================== ;;; EXPERT PO REMONTU AVTOMOBILIA ;;; ;;; CLIPS Version 6.20 ;;; ;;;===============================================
;;**************** ;;* FUNCTION * ;;****************
(deffunction v-ot (?vopr $?per.znatsh) (printout t ?vopr) (bind ?otv (read)) (if (lexemep ?otv) then (bind ?otv (lowcase ?otv))) (while (not (member ?otv ?per.znatsh)) do (printout t ?vopr) (bind ?otv (read)) (if (lexemep ?otv) then (bind ?otv (lowcase ?otv)))) ?otv)
(deffunction da-net (?vopr) (bind ?otv.polz. (v-ot ?vopr yes no y n)) (if (or (eq ?otv.polz. yes) (eq ?otv.polz. y)) then TRUE else FALSE))
;;;***************************************************************;;;*PRAVILA OPREDEL.SISTEMU FACTOV O SOSTOJANII MASHINI * ;;;*********************************************************************************
(defrule mash.rab.norm "" (declare (salience 10)) (mash. rab.norm.) => (assert (vid-remonta "Rem.nenug.")) (assert (iscra est)) (assert (ak. zar.)) (assert (dvig. vr.)))
(defrule mash.rab.neud. "" (declare (salience 10)) (mash. rab.neud.) => (assert (ak. zar.)) (assert (dvig. vr.)) ) ;;;***************************************************** ;;;*PRAVILA OPREDELJUSCHIE VID REMONTA * ;;;* I POPOLNJUSCHIE BASU FACTOV * ;;;*****************************************************
(defrule sost.mashini "" (not (mash. ?)) (not (vid-remonta ?)) => (if (da-net "Mash.zavod. (yes/no)? ") then (if (da-net "Mash. rab.norm. (yes/no)? ") then (assert (mash. rab.norm.)) else (assert (mash. rab.neud.))) else (assert (mash. ne-rabotaet))))
(defrule sost.dvig. "" (mash. ne-rabotaet) (not (dvig. ?)) (not (vid-remonta ?)) => (if (da-net "Dvig.vrast. (yes/no)? ") then (assert (dvig. vr.)) (assert (iskra ne-regul.)) else (assert (dvig. ne-vr.)) (assert (iscra net))))
(defrule sost.topl.sist. "" (mash. rab.neud.) (not (vid-remonta ?)) => (if (da-net "Mash.inertna k pod. topl. (yes/no)? ") then (assert (vid-remonta "Protsh.topl.pr-da"))))
(defrule sost.sist.zagig. "" (mash. rab.neud.) (not (vid-remonta ?)) => (if (da-net "Neritmichn. zagig. (yes/no)? ") then (assert (vid-remonta "Otreg.zazor.kont.")) (assert (iskra ne-regul.))))
(defrule dvig.stuchit-nestuchit "" (mash. rab.neud.) (not (vid-remonta ?)) => (if (da-net "Dvig.stuchit (yes/no)? ") then (assert (vid-remonta "Otreg.zagigan."))))
(defrule sost.mostnosti "" (mash. rab.neud.) (not (mostn. snigena | ne-snigena)) (not (vid-remonta ?)) => (if (da-net "Snigena li mostn. (yes/no)? ") then (assert (mostn. snigena)) else (assert (mostn. ne-snigena))))
(defrule nalichie-topl. "" (mash. ne-rabotaet) (dvig. vr.) (not (vid-remonta ?)) => (if (da-net "topl.konchilos (yes/no)? ") then (assert (vid-remonta "Zapr.topl."))))
(defrule akk.-zarjg.-ne-zarjg. "" (dvig. ne-vr.) (not (ak. ?)) (not (vid-remonta ?)) => (if (da-net "Zarjgen li ak. (yes/no)? ") then (assert (ak. zar.)) else (assert (vid-remonta "Zar.ak.")) (assert (ak. razr.))))
(defrule sost.kontaktov "" (or (and (mash. ne-rabotaet) (iskra ne-regul.)) (mostn. snigena)) (not (vid-remonta ?)) => (bind ?otv.polz. (v-ot "Kakovo sost. kontaktov(norm./opaleni/zagrjzneni)? " norm. opaleni zagrjzneni)) (if (eq ?otv.polz. opaleni) then (assert (vid-remonta "Zamenit kontakti")) else (if (eq ?otv.polz. zagrjzneni) then (assert (vid-remonta "Kontakti pochist.")))))
(defrule sost.katushki-zagig. "" (mash. ne-rabotaet) (iskra net) (ak. zar.) (not (vid-remonta ?)) => (if (da-net "Testirovanie katushki pologit. (yes/no)? ") then (assert (vid-remonta "Zam.soed.pr-da")) else (assert (vid-remonta "Zam.katushcu.zagigan."))))
(defrule vid-rem-ne-opredelen "" (declare (salience -10)) (not (vid-remonta ?)) => (assert (vid-remonta "Obratites k mechanicu.")))
;;;*********************************************************** ;;;* ZAPUSK SISTEMI I PECHAT RECOMENDACIY * ;;;***********************************************************
(defrule imia-sistemi "" (declare (salience 10)) => (printout t crlf crlf) (printout t "EXPERT PO REMONTU AVTOMOBILIA") (printout t crlf crlf))
(defrule pechat-nazv.-remonta "" (declare (salience 10)) (vid-remonta ?item) => (printout t crlf crlf) (printout t "RECOMENDACIJ:") (printout t crlf crlf) (format t " %s%n%n%n" ?item))
|
нужно добавить 2 любых неисправности автомобиля... помогите, завтра сдавать! заранее спасибо!
--------------------
Кто ищет, тот всегда найдет.
|