Рекомендуемая литература. Упражнения.
Разработайте правило make-and-model, которое будет запрашивать у пользователя необходимую информацию о модели оружия и формировать вектор gun в рабочей памяти. Используйте в качестве модели следующие правила:
(defrule class-and-action ?G < – (gun (action NIL)) › (printout t crlf "Please enter the class of gun" t crlf " for example shotgun, rifle, pistol " t crlf "CLASS:" t crlf ;; "Введите класс оружия, " ;; "например, охотничье ружье, карабин, ;; "пистолет и т.д. " ;; "КЛАСС:" (bind?class (read)) (printout t crlf "Please enter the action type of the gun" t crlf "for example bolt, slide, lever, semi, revolver… " t crlf "ACTION:" t crlf ;; "Введите тип оружия, " ;; "например, с цилиндрическим затвором, со ;; скользящим затвором, с рычажным затвором, ;; полуавтоматический, револьвер… ;; "ТИП:" (bind?action (read)) (modify?G (class?class) (action?action))) ;; Разработайте правило capacity, которое будет ;; запрашивать емкость магазина модели оружия. ;; В качестве прототипа используйте приведенное ;; ниже правило caliber, которое запрашивает у ;; пользователя значение калибра модели, (defrule caliber ?G < – (gun (caliber 0.0)) › (printout t crlf "Please enter the caliber of gun" t crlf "CALIBER:" t crlf ;; "Введите калибр оружия, " ;; "КАЛИБР:" (modufy?G (caliber (read)))) ;; Любая полуавтоматическая ;; винтовка (semi-automatic rifle) ;; или охотничье ружье (shotgun) с ;; перечисленными дополнительными признаками. (defrule Part2 (gun (make?M) (model?N) (class?CSrifle|shotgun) (action semi) (features?F&flash-suppressor|barrel-shroud|night-scope)) › (assert (assault-weapon (make?M) (model?N)))) ;;Разработайте правило pistol-grip-shotgun, ;;которое будет относить любое охотничье ружье ;;с пистолетной рукояткой к категории ;;"оружие нападения". ;;Разработайте правила, которые будут ;;запрашивать у пользователя сведения о ;;дополнительных конструктивных характеристиках ;;модели ранее определенного класса. Например, ;;пистолет, как правило, не имеет защитного ;;кожуха на стволе, поэтому в наборе правил не ;;имеет смысла запрашивать эту характеристику, ;;если ранее определен класс модели pistol. ;;Особые случаи касаются тех моделей, которые ;;явно перечислены в законодательном акте ;;Модель Cobray Mil относится к категории "оружие нападения", defrule cobray (declare (salience 20)) (gun (make cobray) (model Mil) (class pistol)) › (assert (assault-weapon (make cobray) (model Mil)))) ;; Модель этого типа не относится ;; к категории "оружие нападения", (defrule rimfire (declare (salience 10)) ?except < – (gun (make?M) (model?N) (class rifle) (caliber.22)) ?mistake < – (assault-weapon) (model?N)) ›: (printout t crlf "The "?M " "?N " is definitely not an assault weapon. " t crlf ;; "Модель "?М " "?N ;; "по определению в законе не относится к ;; категории "оружие нападения"." (retract?mistake) (retract?except)) ;;Разработайте аналогичное правило ;;slide-action, которое будет исключать ;;любое охотничье ружье со скользящим затвором ;;из категории "оружие нападения". ;;Правила вывода результатов. ;;Разработайте правило probably-is, которое ;;будет извещать пользователя о том, что ;;представленная им модель может быть отнесена ;;к категории "оружие нападения", согласно действующему ;;законодательному акту. В качестве прототипа ;;можете воспользоваться приведенным ниже ;;правилом, которое извещает пользователя об ;;обратном результате экспертизы. (defrule probably-is-not (declare (salience – 20)) (gun (make?M) (model?N)) (not (assault-weapon (make?M) (model?N))) › (printout t crlf "The "?M " "?N " is probably not an assault weapon. " t crlf ;; "Модель "?M " "?N ;; ", вероятно, не относится к ;; категории "оружие нападения"." (halt))