КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Пример. printout t Т = ?t t)
printout t " Т = "?t t) Оператор выводит текст Т= и значение переменной?t, а затем переводит курсор на новую строку.
Рассмотренное правило позволяет найти все комбинации (буква–цифра), удовлетворяющие условию для первых разрядов трех чисел. По аналогии с этим правилом составим конечное правило для нахождения решения: (defrule find-solution (combination D?d) (combination T?t'&~?d) (test (= (mod (+?d?d) 10)?t)) (combination L?l&~?d&~?t) (combination R?r&~?d&~?t&~?l) (test (= (mod (+?d?d (* 10?1) (* 10?l)?t)) 100) (combination A?a&~?d&~?t&~?l&~?r) (combination E?e&~?d&~?t&~?l&~?r& (test (= (mod (+?d?d (* 10?1) ((* 100?a) (* 100?a)) 1000) (+ (* 100?e) (* 10?r)?t))) (combination N?n&~?d&~?t&~?i&~?r&~?a&~?&e) (combination В?b&~?d&~?t&~?l&~?r&~?a&~?&e~?&n) (test (= (mod (+?d?d (* 10?1) (* 10?l) (* 100?a) (* 100?a) (* 1000?r) (*1000?n)) 10000) (+ (* 1000?b) (* 100?e)(* 10?r)?t) (combination 0?o&~?d&~?t&~?l~?r&~?а&~?е&~?n&~?b) (combination G?g&~?d&~?t&~?l&~?&~?а&~?е&~?n&~?b~?о) (test(=(+?d?d (* 10?l)(*10?l) (* 100?а) {* 100?а) (* 1000?r) (* 1000?n) (10000?е) (* 10000?о) (* 100000?q) (* 100000?d)) (+(*100000?r)(* 10000?о) (* 1000?b)(* 100?е)(* 10?r)?t))) => (printout t "A solution is: " t) (printout t "G = "?g t) (printout t "E = "?e t) (printout t "R = "?r t) (printout t "A = "?а t) (printout t "L = "?l t) (printout t "D = "?d t) (printout t "O = "?o t) printout t "N = "?n t) (printout t "B = "?b t) (printout t "T = "?t t) (printout t " "?g?e?r?a?l?d t) (printout t "+"?d?o?n?a?l?d t) (printout t " " "---------" t) (printout t " = "?r?o?b?e?r?t t t)
Теперь для поиска решения остается занести факты, соответствующие комбинациям из одной буквы и одной цифры, в список фактов. Это можно сделать командой assert.
(assert (combination D 0) (combination D 1) (combination A 1) (combination L 9) ...)
Однако, т.к. количество фактов равно 100, лучше поступить по-другому. Сопоставим буквам и цифрам следующие факты: (number 0), (number 1), (number 2), …, (number 9), (letter G), (letter E), (letter R), (Letter A), (letter L), (letter D), (letter O),(Letter N), (letter B), (letter T). Составим правило, по которому в список фактов будут заноситься факты, соответствующие комбинациям из одной буквы и одной цифры.
(defrule generate_combination (number?x) (letter?y) => (assert (combination (?y?x))))
Согласно данному правилу, если в списке фактов присутствуют факты, имеющие вид (number?x), (letter?y), где вместо переменных стоят вполне конкретные значения, в список фактов добавляется еще один факт − (combination?y?х), в котором вместо переменных стоят значения из фактов. Наконец, составим правило, в соответствии с которым, во-первых, на экран будет выводиться условие задачи, а во-вторых, в список фактов будут заноситься факты, соответствующие буквам и цифрам. Поскольку это правило должно выполняться всегда, то его условная часть будет пустой.
(defrule startup => (printout t t "The problem is" t t) (printout t " GERALD" t) (printout t "+ DONALD" t) (printout t "------------" t) (printout t " = ROBERT" t t) (assert (number 0) (number 1) (number 2) (number 3) (number 4) (number 5) (number 6) (number 7) (number 8) (number 9) (letter G) (letter E) (letter R) (letter A) (letter L) (letter D) (letter O) (letter N) (letter B) (letter T)))
Таким образом, рассмотренная программа состоит из трех правил: startup, generate_combination и find_solution. Первое из них выводит на экран условие задачи и добавляет в список факты, соответствующие отдельным буквам и цифрам. Второе правило, используя факты, введенные в список фактов первым правилом, заносит в список фактов факты, которые представляют собой всевозможные комбинации из десяти цифр и десяти букв. Третье правило позволяет найти среди этих фактов те, которые удовлетворяют условию задачи, и выводит на экран полученное решение. Перейдем к порядку выполнения разработанной программы в ИО CLIPS.
Дата добавления: 2014-12-29; Просмотров: 573; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |