дб. Четвертое издание джозеф Джарратано Университет Хьюстон клиэрЛэйк Гари Райли People5oft, Издательский дом "Вильямс" Москва СанктПетербург Киев 2007 ббк 32. 973. 26 018 75 Д
Скачать 3.73 Mb.
|
block1 ?block2 $?rest2)) (printout t ?block1 " moved on top of ? block2 "." crlf)) (defrule move-to-floor ?goal <- (goal (move ?block1) (on-top-of floor)) ?stack-1 <- (stack ?block1 $?rest) — > (retract ? goal ?stack-1) (assert (stack ?block1)) (assert (stack $?rest)) (printout t ?block1 " moved on top of floor." crlf)) (defrule clear-upper- block (goal (move ?block1)) (stack ?top $? ?block1 $?) => (assert (goal (move ?top) (on-top-of floor)))) (defrule clear-lower-block (goal (on-top-of ?block1)) (stack ?top $? ?block1 $?) => (assert (goal (move ?top) (on-top-of floor)))) 615 7.25. Резюме 7.25 Резюме Задачи 7.1. Преобразуйте следующие предложения в факты, заданные в операторе de f— йася. Для каждой группы взаимосвязанных фактов определите конструкцию de f template, которая описывает более общее отношение. The father of John is Tom. The mother of John is Susan. The parents of John are Tom and Susan. Tom is а father. Susan is а mother. В настоящей главе приведено вводное описание фундаментальных компонентов CLIPS. Первым компонентом системы CLIPS являются факты. Факты формируются из полей, которые могут представлять собой символ, строку, целое число или число с плавающей точкой. Первое поле факта обычно используется для указания типа информации, хранимой в факте, и называется именем отношения. Для присваивания имен слотов конкретным полям факта, начиная с указанного имени отношения, используется конструкция def template. Для определения фактов как начальных знаний служит конструкция de f f acts. Вторым компонентом системы CLIPS являются правила. Каждое правило состоит из левой и правой части. Левая часть правила может рассматриваться как часть IF, а правая часть — как часть. Правила могут иметь несколько шаблонов и действий. Третьим компонентом системы CLIPS является машина логического вывода. Правила, шаблоны которых удовлетворяются фактами (те. проверка шаблонов на соответствие фактам оканчивается успешно, активизируются, в результате чего активизированные правила помещаются в рабочий список правил. А наличие в системе CLIPS свойства релаксации исключает возможность постоянной активизации одних и тех же правил под действием уже воспринятых фактов. Кроме того, в настоящей главе дано вводное описание такого понятия, как переменные. Переменные используются для выборки информации от фактов и ограничения значений слотов при сопоставлении с шаблонами в левой части правила. Переменные могут сохранять адреса фактов, сопоставленных с шаблонами в левой части правила, что позволяет извлекать факты, связанные с шаблонами, в правой части правила. Если поле, с которым должно быть выполнено согласование, может иметь любое значение и его значение в дальнейшем не требуется в левой или в правой части правила, то вместо переменных могут использоваться однозначные подстановочные символы. Многозначные переменные и подстановочные символы позволяют согласовывать факты больше чем с одним полем в шаблоне Глава 7. Введение в CLIPS John is а son. Tom is а male. Susan is а female. John is а male. 7.2. Определите конструкцию de f template для факта, содержащего информацию о некотором множестве. Конструкция def template должна включать информацию об имени или описании множества, содержать список элементов в множестве и указывать, является ли это множество подмножеством другого множества. Представьте следующие множества как факты с использованием формата, определяемого предложенной вами конструкцией deftemplate: A = ( 1, 2, 3 } В = ( 1, 2, 3, red, green ) С ( red, green, yellow, blue ) 7.3. Массив с разреженным заполнением содержит относительно немного эле- ментов, отличных от нуля. Его можно было бы представить более эффективно в виде связного списка или дерева. Как можно представить массив с разреженным заполнением с использованием фактов Опишите конструкцию deftemplate, на основе которой факты могут использоваться для представления массива. Каковы возможные недостатки массива с использованием фактов, в отличие от способа представления массива с использованием структуры данных типа массива в процедурном языке 7.4. Преобразуйте сеть общего видана которой представлены авиалинии, показанную на рис. 2.4, а (см. св ряд фактов, заданных в операторе сей. Для описания фактов используйте единственную конструкцию deftemplate. 7.5. Преобразуйте семантическую сеть, представляющую семью, которая показана на рис. 2.4, б (см. св ряд фактов, заданных в операторе def facts. Для описания сформированных фактов используйте несколько конструкций de f template. 7.6. Преобразуйте семантическую сеть, которая показана на рис. 2.5 (см. св ряд фактов, заданных в операторе def facts. Для описания фактов используйте несколько конструкций deftemplate. Например, связи Аи АКО должны стать именами отношений, и для каждой из них должна быть предусмотрена собственная конструкция de f template. 7.7. Преобразуйте бинарное дерево решений, представляющее информацию о классификации животных на рис. 3.3 (см. св ряд фактов, заданных в операторе с1еййacts. Покажите, как могут быть представлены связи Задачи 617 между узлами. Требуется ли для листовых узлов дерева такое представление, которое отличается от представления для других узлов дерева 7.8. Реализуйте семантическую сеть, рассматриваемую в задаче 2.1, как оператор de f f acts с использованием конструкций de f template с именами АКО и IS — А. 7.9. Для надлежащего роста растений требуется много разных типов питательных веществ. Тремя наиболее важными питательными веществами для растений, которые поступают с удобрениями, являются азот, фосфор и калий. В случае нехватки одного из этих питательных веществ возникают различные симптомы. Преобразуйте приведенные ниже эвристики вправила, позволяющие определить дефицит питательного вещества. Примите предположение, что в условиях сбалансированного питания растение имеет зеленый цвета. А that is pale yellow in color may have а nitrogen deficiency. А that has reddish-brown leaf edges may have а nitrogen deficiency. A plant with stunted root growth may have а phosphorus deficiency. А plant with а spindly stalk may have а phosphorus deficiency. А plant that is purplish in color may have а phosphorus deficiency. А plant that has delayed in maturing may have а phosphorus deficiency. А plant with leaf edges that appear scorched may have а potassium deficiency. А plant with weakened stems may have а potassium deficiency. А plant with shriveled seeds or fruits may have а potassium deficiency. Определите конструкции def template, необходимые для описания фактов, которые используются в правилах. Ввод данных в программу должен осуществляться путем внесения в список фактов в виде фактов информации о симптомах. В выводе программы, отображаемом на терминале, должно быть указано, каких питательных веществ недостает растению. Реализуйте такой метод, который позволил бы избежать вывода нескольких сообщений, касающихся дефицита одного итого же вещества, вызванных наличием Глава 7. Введение в CLIPS больше чем одного симптома. Проверьте работу своей программы со следующими входными данными The plant has stunted root growth. The plant is purplish in color. 7.10. Пожары классифицируются в соответствии с тем, каковым является основной участвующий в них горючий материал. Преобразуйте следующую информацию в правила, применяемые для определения категории пожара Туре А fires involve ordinary combustibles such as paper, wood, and cloth. Туре В fires involve flammable and combustible liquids (such as oil and gas), greases, and similar materials. Туре С fires involve energized electrical equipment. Туре D fires involve combustible metals such as magnesium, sodium, and potassium. Типы огнетушителей, которые должны использоваться для тушения пожара, зависят от категории пожара. Преобразуйте следующую информацию вправила А fires should be extinguished with heat-absorbing or combustion-retarding extinguishers such as water or water-based liquids and dry chemicals. Class В fires should be extinguished by excluding air, inhibiting the release of combustible vapors, or interrupting the combustion chain reaction. Extinguishers include dry chemicals, carbon dioxide, foam, and bromotrifluoromethane. С fires should be extinguished with а nonconducting agent to prevent short circuits. If possible the power should be cut. Extinguishers include dry chemicals, carbon dioxide, and bromotrifluoromethane. Class D fires should be extinguished with smothering and heat-absorbing chemicals that do not react with the burning metals. Such chemicals include trimethoxyboroxine and screened graphitized coke. Опишите факты, используемые в правилах. Ввод данных в программу должен осуществляться путем внесения в список фактов информации о типе горючего материала в виде факта. В выводе программы необходимо указать, Задачи 619 какие огнетушители могут использоваться и какие прочие действия должны быть предприняты, например отключение подачи электроэнергии. Продемонстрируйте работу своей программы на одном горючем материале из тех, что относятся к каждой категории пожара. 7.11. К облакам нижнего яруса, находящимся на высоте 1800 мили меньше, относятся слоистые и слоисто-кучевые облака. К облакам среднего яруса, находящимся на высоте от 1800 дом, относятся высокослоистые, высококучевые и слоисто-дождевые облака. К облакам верхнего яруса, находящимся на высоте большем, относятся перистые, перисто-слоистые и перисто-кучевые облака. Кучевые и кучево-дождевые облака могут простираться от нижнего до верхнего яруса. Кучевые, слоисто-кучевые, высококучевые, кучево-дождевые и перисто-кучевые облака выглядят как крупные скругленные груды. Слоистые, высокослоистые, слоисто-дождевые и перисто-слоистые облака напоминают гладкие, ровные листы. Перистые облака с виду кажутся тонкими, как пучки волос. Слоисто-дождевые и кучево- дождевые облака несут за собой осадки и имеют темно-серый цвет. Напишите программу, позволяющую идентифицировать типы облаков. В качестве входных данных для программы должны использоваться факты, описывающие атрибуты облака После этого программа должна выводить информацию о типе идентифицированного облака. 7.12. Один из способов классификации звезды предусматривает их разбиение на цветовые группы, называемые спектральными классами. Классы охватывают звезды со светимостью во всем спектре видимого света, начиная со звезд синего спектрального класса "О" и заканчивая звездами красного спектрального класса "М"; промежуточное положение между ними занимают звезды желтого спектрального класса "G". Спектральный класс звезды связан с ее температурой звезды класса "О" имеют температуру больше 37000'F; звезды "В" класса имеют температуру от до 37000'F; звезды класса "А" имеют температуру от 12 501'F до 17 000'F; звезды класса "F" имеют температуру от 10 301'F до 12 500'F; звезды класса "G" имеют температуру от 8 001'F до 10300'F; звезды класса "К" имеют температуру от 5 501'F дои звезды класса "М" имеют температуру от 5 500'F или меньше. Звезды могут также классифицироваться по величине, которая является мерой их яркости. Чем ниже величина, тем ярче звезда. Может быть принято предположение, что величины находятся в пределах от — 7 до 15. В табл. перечислены некоторые самые яркие, наиболее широко известные звезды с указанием спектрального класса и величины, а также их расстояния от Земли в световых годах. Напишите программу, которая принимает на входе два факта, представляющие спектральный класс и величину звезды. После этого программа должна вывести следующую информацию Глава 7. Введение в CLIPS в указанном порядке все звезды, имеющие заданный спектральный класс все звезды, имеющие заданную величину наконец, все звезды, соответствующие и заданному спектральному классу, и заданной величине, наряду сих расстоянием от Земли в световых годах. Таблица Некоторые самые яркие и наиболее широко известные звезды Спектральный класс Величина Расстояние от Земли Звезда Сириус Канопус Арктур Вега Капелла Ригель Процион Бетельгейзе Альтаир Альдебаран Спика — 3 Антарес Поллукс Денеб 7.13. В табл. 7.2 приведены характеристики наиболее широко известных драгоценных камней, включая их твердость (сопротивление внешним усилиям, измеряемое по шкале твердости Моса), плотность (отношение массы к единице объема, измеряемое в граммах на кубический сантиметр) и цвета. Запишите правила, необходимые для того, чтобы определить, является ли драгоценный камень хризобериллом, если даны три факта, представляющие твердость, плотность и цвет драгоценного камня. 7.14. Напишите программу которая помогает в процессе выбора кустарника, подходящего для посадки. В табл. 7.3 перечислено несколько видов кустарников и указано, обладает ли каждое из этих растений определенными характеристиками, которые включают устойчивость к холоду, к затенению, к засухе, к влажной и кислой почве, к городским условиям (к загазованности воздуха), пригодность для кадочного выращивания, простота культивирования и быстрота роста. Отметка в таблице указывает, что кустарник обладает соответствующей характеристикой. В качестве входных данных А F КА В F МАК В МКА Задачи Таблица 7.2. Характеристики наиболее широко известных драгоценных камней Цвет Желтый, коричневый, зеленый, синий, белый, бесцветный 10 3,52 Красный, розовый, желтый, коричневый, зеленый, синий, фиолетовый, черный, белый, бесцветный Корунд Желтый, коричневый, зеленый Красный, розовый, желтый, коричневый, зеленый, синий, фиолетовый, белый, бесцветный 8,5 8 3,72 3,6 Хризоберилл Шпинель Красный, розовый, желтый, коричневый, синий, фиолетовый, белый, бесцветный 3,52-3,56 Топаз Красный, розовый, желтый, коричневый, зеленый, синий, белый, бесцветный 7,5-8,0 2,7 Берилл 6 — 7,5 4,7 Циркон Кварц Турмалин 3,1 6,5 — 7 6,5 — 7 3,3 3,3 Перидот Жадеит Красный, розовый, желтый, коричневый, белый, черный, бесцветный 5,5- 6,5 2 — 2,2 Опал Зеленый, белый, черный, бесцветный 5 — 6 2,9 — 3,4 Нефрит Синий 5 — 6 2,7 Бирюза для программы должны использоваться факты, указывающие желательную характеристику, которую должен иметь кустарника результатом работы программы должен быть список растений, обладающих всеми необходимыми характеристиками. Драгоценный камень Твердость Плотность Желтый, коричневый, зеленый, фиолетовый, белый, бесцветный Красный, розовый, зеленый, синий, фиолетовый, белый, черный, бесцветный Красный, розовый, желтый, коричневый, зеленый, синий, белый, черный, бесцветный Желтый, коричневый, зеленый Красный, розовый, желтый, коричневый, зеленый, синий, фиолетовый, белый, черный, бесцветный ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° ° g ж ой Ж о g С Ка О ВЛ.дОЙ вл.одл.мч кинваойиаилчюгХя вл.о,иода иинваипвФча олоньоМвя sa if чл,донМолийц ыииаогЫ ыияЖойол я чл.эоаиьиол.эя эаьои иоигэия я чюоаиьиою, эаьои ионжвва я чл.доаиьиол.э, дХХЭВЕ Я чл.эоаиьиоы„ 0%ИНдНЭЛ.ВЕ Я чл.доаиьиоы, Жоигох я чюоаиьиою, cat м ф ж h. о v о Ф ж Р. а о ж д Задачи 623 В стеке первое введенное значение становится последним удаляемым значением, а последнее введенное значение — первым удаляемым значением. Очередь действует по противоположному принципу — первое введенное значение становится первым удаляемым значением, а последнее введенное значение — последним удаляемым значением. Запишите правила, которые вводят и удаляют значения в очереди. Примите предположение, что существует только одна очередь. 7.15. Напишите одно или несколько правил, которые формируют все перестановки исходного факта base — fact и выводят их на внешнее устройство. Например, обработка следующего факта 7.16. (base-fact red green blue) должна привести к получению такого вывода Permutation Напишите правила, которые переводят конечный автомат из текущего состояния в следующее состояние после ввода факта в следующей форме (input После перехода машины в следующее состояние входной факт должен быть извлечен. Проверьте разработанные правила и представления фактов наконечных автоматах, которые показаны на рис. 3.5 (см. си (см. с. 202). Permutation Permutation Permutation Permutation Permutation is (red green blue) is (red blue green) is (green red blue) is (green blue red) is (blue red green) is (blue green red) Глава Развитые средства сопоставления с шаблонами Введение Правила такого типа, которые рассматривались в главе 7, иллюстрируют простые средства сопоставления шаблонов с фактами. А в этой главе приведено вводное описание некоторых понятий, лежащих в основе мощных средств сопоставления фактов с шаблонами и манипулирования фактами. Прежде всего рассматриваются ограничения полей. Затем описаны возможности использования функций CLIPS, в том числе рассматривается ряд функций для выполнения основных арифметических операций и операций ввода-вывода. После этого обсуждаются различные способы управления ходом выполнения правил. Для создания более мощных и более сложных программ по сравнению с теми, которые рассматривались в предыдущей главе, используются группы правил. Кроме того, демонстрируются методы ввода, сравнения значений и формирования циклов, а также методы задания управляющих знаний с применением правил. К тому же в данной главе представлено несколько других типов условных элементов, кроме условных элементов шаблона. Эти условные элементы позволяют использовать единственное правило для выполнения функций нескольких правили предоставляют возможность выполнять согласование не только с существующими, но и с несуществующими фактами Глава 8. Развитые средства сопоставления с шаблонами Ограничения полей Ограничение поля not Безусловно, простейшие возможности сопоставления с шаблонами предоставляют литеральные константы и результаты связывания переменных, нов языке CLIPS предусмотрены также более мощные операции сопоставления с шаблонами. Эти дополнительные возможности сопоставления с шаблонами будут представлены на примере повторного анализа задачи определения групп людей с конкретным цветом волос и глаз. В частности, предположим, что необходимо найти всех людей, не имеющих каштановый цвет волос. Один из способов решения этой задачи состоит в написании отдельных правил для каждого цвета волос. Например, следующее правило позволяет найти людей с черными волосами (в примерах данного раздела используется конструкция de f template с именем person, которая рассматривалась в разделе 7.19): (defrule black-hair-is-not-brown- hair (person (name ?name) (hair black)) — > (printout t ?name " does not have brown hair" crlf)) А такое правило позволяет найти людей со светлыми волосами (defrule blonde-hair-is-not-brown- hair (person (name ?name) (hair blonde)) — > (printout t ?name " does not have brown hair" crlf)) Еще одно правило может быть предусмотрено для поиска людей с рыжими волосами. Но проблема, возникающая, если запись правил осуществляется в такой форме, состоит в том, что каждый раз выполняется проверка на то, что волосы рассматриваемого лица не являются каштановыми. В приведенных выше правилах предпринимается попытка проверить это условие окольным путем. Иначе говоря, в этих правилах определяются все цвета волос, отличные от каштанового, и для каждого из них записывается правило. Разумеется, если есть возможность задать все цвета, то данный метод является осуществимым. Нов этом примере было бы проще принять предположение, что цвет волос может быть любым (пусть даже фиолетовым или зеленым. Один из способов устранения указанной проблемы состоит в использовании ограничения поля для регламентации значений, которые может иметь поле в левой части правила. Один из типов ограничений поля называется соединительным ограничением (такое название принято потому, что оно используется для соеди- 627 8.2. Ограничения полей нения переменных и других ограничений. Соединительные ограничения подразделяются натри типа. Ограничение первого типа называется ограничение not и символически обозначается с помощью тильды, -Ограничение not действует на одно ограничение или переменную, которые непосредственно следуют за ним. Если ограничение, следующее за ограничением not, сопоставляется с полем, то под действием ограничения not успешное сопоставление становится неудачным. Если же ограничение, следующее за ограничением not, сопоставляется с полем, то под действием ограничения not неудачное сопоставление становится успешным. По существу, ограничение not отрицает результат применения следующего за ним ограничения. Таким образом, как показано ниже, правило поиска людей, не имеющих каштанового цвета волос, может быть записано гораздо более просто с помощью ограничения not. (defrule person-without-brown-hair (person (name ?name) (hair -brown)) => (printout t ?name " does not have brown hair" crlf)) Благодаря использованию ограничения not появляется возможность записать единственное правило, выполняющее работу многих других правил, в которых требовалось указать каждый возможный цвет волос. Ограничение поля or (defrule black-or- brown-hair (person (name ?name) (hair brown black)) > (printout t ?name " has dark hair" crlf)) В результате ввода фактов (person (name Joe) (eyes blue) (hair brown)) ив списке фактов активизируется это правило, относящееся к каждому из указанных фактов, и вводится в рабочий список правил. Вторым соединительным ограничением является ограничение or, которое символически обозначается с помощью вертикальной черты, . Ограничение or используется для обеспечения возможности согласовывать с полем шаблона одно или несколько допустимых значений. Например, следующее правило позволяет найти с помощью ограничения or всех людей, имеющих волосы черного или каштанового цвета: Глава 8. Развитые средства сопоставления с шаблонами Ограничение поля ааб (defrule black-or-brown-hair (person (name ?name) (hair ?color&brown black)) => (printout t ?name " has " ? color " hair" crlf)) В этом случае переменная ? color будет связана стем значением цвета, который был сопоставлен с помощью ограничения brown black. Ограничение and может также применяться в сочетании с ограничением not. Например, активизация следующего правила происходит в том случае, если цвет волос какого-то человека не является ни черным, ни каштановым (defrule black-or-brown-hair (person (name ?name) (hair ?color&-brown&-black)) — > (printout t ?name " has " ?color " hair" crlf)) Совместное применение ограничений полей с другими конструкциями Ограничения полей могут использоваться совместно с переменными и другими литеральными значениями для создания мощных средств сопоставления с шаблонами. Предположим, например, что требуется правило, позволяющее определить, есть ли два таких человека, описания которых соответствуют следующим условиям. У первого человека глаза синие или зеленые, а волосы — не черные. Соединительным ограничением третьего типа является ограничение Ограничение and следует отличать от условного элемента который рассматривался в разделе 7.15. Ограничения and символически обозначается знаком амперсанда, &. Как правило, ограничение and используется только в сочетании с другими ограничениями другие возможные способы применения этого ограничения не имеют практического значения. Один из случаев, в которых ограничение and является очень полезным состоит в том, что в экземпляр связывания переменной помещаются дополнительные ограничения. Например, предположим, что некоторое правило активизируется под действием факта person, в котором указано, что цвет волос является каштановым или черным. Как показано в предыдущем примере, шаблон для такого факта можно легко представить с использованием ограничения or. Но как после этого определить значение, представляющее цвет волос Решение этой задачи состоит в том, чтобы связать с помощью ограничения and переменную со значением цвета, которое было согласовано с шаблоном, а затем вывести значение этой переменной, как показано ниже. Ограничения полей 629 Второй человек имеет цвет глаз, отличный от цвета глаз первого человека, а его волосы либо рыжие, либо имеют такой же цвет, как и у первого человека. Ниже приведено правило, позволяющее выполнить сопоставление с учетом этих ограничений t ?name2 ?hair2 ? eyes 1 " eyes and crlf ) ?eyes2 " eyes and crlf)) has hair" has hair" Приведенный пример целесообразно рассмотреть более подробно. Ограничение еуея1 &Ыые green в слоте eyes первого шаблона связывает цвет глаз первого человека с переменной ? eyes 1, если значение цвета глаз в рассматриваемом факте сопоставляется либо с синим, либо с зеленым цветом. Ограничение ? hairl &-black в слоте hair первого шаблона связывает переменную hair 1, если значение цвета волос в сопоставляемом факте отлично от черного. Ограничение ? name2 &-? namel в слоте пате второго шаблона выполняет важную операцию. Оно связывает значение слота name факта person с переменной ?name2, если это значение не совпадает со значением переменной ? namel. Если имена представляют собой уникальные идентификаторы (те. в базе данных, под которой подразумевается список фактов, нет данных о двух людях с одинаковыми именами, это ограничение гарантирует, что оба шаблона не будут сопоставляться с одними тем же фактом. Такой случай не может произойти с этими двумя шаблонами, поскольку цвет глаз второго человека должен отличаться от цвета глаз первого человека. Но этот полезный метод, имеющий много важных приложений, нужно полностью понять. В разделе 12.2 показано, как можно реализовать такой же метод с использованием адресов фактов для обеспечения того, чтобы факты стали различными. Этот метод позволяет применять рассматриваемое правило к данным о людях, имеющих одинаковые имена, но разные цвета волос и глаз. Ограничение? eyes2 &-? eyes1 в слоте eyes второго шаблона выполняет во многом такую же проверку, как и описанное перед этим ограничение. Последнее ограничение, заданное в слоте hair второго шаблона &red ?hairl, связывает значение цвета волос второго человека с переменной ?hair2, либо Глава 8. Развитые средства сопоставления с шаблонами 630 (defrule bad-variable-use (person (name ?name) (hair red i ?hair)) — > (printout t ?name " has " ?hair " hair " crlf)) В качестве заключительного замечания, касающегося объединения ограничений, отметим следующее необходимо учитывать, что некоторые комбинации ограничений не позволяют осуществлять какие-либо полезные действия. Например, использование ограничения and для соединения литеральных констант (например, black&blue) всегда вызывает то, что ограничения не удовлетворяются (единственным исключением может быть лишь применение литералов, которые являются идентичными. Аналогичным образом, связывание отрицаемых литералов с помощью ограничения or (например, -black -blue) всегда приводит к тому, что ограничение удовлетворяется. 8.3 Функции и выражения Элементарные математические функции Язык позволяет не только обрабатывать символические факты, но и проводить вычисления. Но всегда следует учитывать, что такой язык экспертных систем, как CLIPS, не предназначен для сложных математических расчетов. Безусловно, математические функции CLIPS являются достаточно мощными, но они в основном должны обеспечивать модификацию таких числовых значений, которые применяются для осуществления операций логического вывода с помощью прикладной программы. С другой стороны, для выполнения сложных математических расчетов в большей степени приспособлены другие языки, такие как FORTRAN, в которых почти не предусматривается или вообще не предусматривается проведение рассуждений, касающихся чисел. В языке CLIPS предусмотрена поддержка элементарных арифметических операций, показанных в табл. (В приложении Д содержится список прочих математических функций, предусмотренных в языке CLIPS. Дополнительные сведения обо всех функциях, применяемых если цвет волос является рыжим, либо если он имеет такое же значение, как и значение переменной ?hair1. Следует отметить, что переменная уже должна быть связана, если она используется в составе ограничения поля or. Переменные связываются, только если они представляют собой первое условие в поле и только если они встречаются отдельно или соединяются другими условиями с помощью соединительного ограничения and. Например, попытка применить следующее правило приводит к возникновению ошибки, поскольку переменная ? hair не связана. функции и выражения 631 в языке CLIPS, приведены в руководстве Basic Programming Guide в электронном формате на компакт-диске, прилагаемом к данной книге) Таблица Элементарные арифметические операции языка Арифметические операции Назначение Сложение Вычитание Умножение Деление В данном случае операция деления в префиксной форме принимает следующий вид, поскольку в префиксной форме знак операции предшествует параметрам (/ (Y) (Х) Теперь к результату деления необходимо применить операцию проверки, чтобы определить, превышает ли полученное значение О. Таким образом, префиксная форма принимает следующий вид (> (/ (Y) (Х) 0) Для представления числовых выражений в языке CLIPS применяется такой же стиль, как в языке LISP. В языках LISP и CLIPS числовое выражение, которое обычно принято записывать как 2 + должно быть записано в префиксной форме, (+ 2 3) Общепринятый способ записи числовых выражений называется инфиксной формой, поскольку в этой форме знаки математических операций записываются между операндами, или параметрами. А в префиксной форме, применяемой в языке, знак операции должен предшествовать операндам, а числовое выражение должно быть заключено в круглые скобки. Преобразование из инфиксной формы в префиксную является довольно несложным. Например, предположим, что требуется проверить две точки на плоскости, чтобы определить, имеет ли проходящая через них прямая положительный наклон. В обычном инфиксном представлении такое условие можно записать следующим образом (у — ух х) > О Обратите внимание на то, что символ больше, >, представляет собой функцию CLIPS, которая определяет, является ли первый параметр большим, чем второй параметр. (Функция > описана в приложении Див документе Basic Programming Guide.) Чтобы записать это выражение в префиксной форме, целесообразно начать с такого действия представить числитель дроби как (а знаменатель — как (Х) . Поэтому приведенное выше выражение можно записать таким образом (Y) / (ХО Глава 8. Развитые средства сопоставления с шаблонами В инфиксной форме выражение Y = у — у. Номы обязаны ив этом случае использовать префиксную форму, поскольку создается префиксное выражение. Таким образом, вместо выражения ( Y) необходимо подставить ( — у у, а вместо (Х) ввести ( — х х. Заменив (Y) и (Х) их префиксными формами, получим окончательное выражение, предназначенное для проверки того, имеет ли прямая, проходящая через две точки положительный наклон, как показано ниже. (> (/ (- у у) (- х2 х1)) 0) Простейшим способом вычисления числового выражения (а также любого другого выражения) в языке CLIPS является ввод этого выражения в приглашении верхнего уровня. Например, после ввода выражения (+ 2 2) в приглашении будет получен следующий вывод CLIPS> (+ 2 2) 4 CLIPS> В этом выводе показан правильный ответ — 4. Вообще говоря, в приглашении верхнего уровня может быть введено любое выражение CLIPS, подлежащее вычислению. Большинство функций (таких как функция сложения) имеют возвращаемое значение. Возвращаемым значением может быть целое число, число с плавающей точкой, символ, строка или даже многозначное значение. Другие функции (такие как команды facts и agenda) не имеют возвращаемого значения. Но функции, не имеющие возвращаемого значения, обычно создают так называемый побочный эффект. Например, побочным эффектом применения команды facts является вывод на внешнее устройство фактов из списка фактов. В приглашении верхнего уровня можно также вводить другие арифметические функции. Ниже приведены результаты, полученные при вычислении некоторых других выражений. CLIPS> (+ 2 3) 1 5 CLIPS> (- 2 3) 1 — 1 CLIPS> (* 2 3) 6 CLIPS> (/ 2 3) 1 0.66666667 Обратите внимание на то, что в ответе, полученном после выполнения операции деления, вполне может обнаруживаться ошибка округления в последней цифре. Но приведенный выше результат может измениться в зависимости от применяемой операционной системы. Функции и выражения 633 Если всеми параметрами функций +, — и * являются целые числа, то возвращаемое значение также является целочисленным. Если же одним из параметров функции является число с плавающей точкой, то и возвращаемое значение представляет собой число с плавающей точкой. Первый параметр функции / всегда преобразуется в число с плавающей точкой, поэтому возвращаемое значение этой функции всегда является числом с плавающей точкой, например, как показано ниже. CLIPS>(+3. 0) J 5.0 CLIPS> (+ 2.0 3)J 5.0 CLIPS> (+ 2 3) 1 5 Переменное количество параметров Еще раз отметим, что результаты выполнения операции деления немного зависят от используемой операционной системы. Префиксная система обозначений позволяет очень просто представить переменное количество параметров, причем переменное количество параметров принимают многие функции языка Параметры числового выражения в количестве больше двух могут быть указаны после функций +, —, / и *. К параметрам, количество которых превышает два, применяется одна и та же последовательность арифметических вычислений. Следующие примеры, введенные в приглашении верхнего уровня, показывают, как используются три параметра (вычисление осуществляется слева направо CLIPS> (+ 2 3 4) 9 CLIPS> (- 2 3 4) — 5 CLIPS> (* 2 3 4) 24 соря (/ 2 3 4) 0.1бббббб7 CLIPS> 634 Глава 8. Развитые средства сопоставления с шаблонами Определение приоритета и уровня вложенности выражений Одна из важных особенностей, касающихся вычислений в программах на языке CLIPS или LISP, состоит в том, что арифметические операции не имеют встроенных свойств предшествования. В других языках программирования считается, что операции умножения и деления имеют более высокий приоритет, чем сложение и вычитание, а на компьютере в первую очередь должны выполняться операции с более высоким приоритетом. С другой стороны, в языках LISP и все выражения просто вычисляются слева направо, причем порядок вычисления определяется порядком вложенности круглых скобок. В префиксной системе обозначений могут также выполняться вычисления, состоящие из разных операций. Например, предположим, что должно быть вычислено следующее инфиксное выражение 2+3*4 Общепринятый подход к вычислению этого выражения состоит в том, что 3 следует умножить на 4, а затем сложить результат с 2. Нов языке порядок вычислений должен быть задан явно. Приведенное выше выражение вычисляется путем ввода в приглашении верхнего уровня следующей строки CLIPS> (+ 2 (* 3 4)) 1 14 CLIPS> В этом правиле в первую очередь вычисляется выражение, заданное в самых внутренних круглых скобках; таким образом, 3 умножается на 4. Затем полученный результат складывается с 2. Если же требуется вычислить выражение (2 + 3) * 4, то вначале выполняется сложение, поэтому в приглашении верхнего уровня следует ввести такое выражение (* (+ 2 3) 4) 1 20 CLIPS> Вообще говоря, выражения можно свободно вкладывать в другие выражения. Это означает, что выражение может быть помещено ив команду assert, как показывает следующий примера. Суммирование значений с использованием правил Кроме того, поскольку имена функций также представляют собой символы, то их можно использовать наравне с любыми другими символами. Например, их можно применять в качестве полей в факте, как показано ниже. CLIPS> (clear)J CLIPS> (assert (expression 2 + 3 * 4)) 1 О CLIPS> (facts)J О (expression 2 + 3 * 4) For а total of 1 fact. CLIPS> Суммирование значений с использованием правил В качестве простого примера использования функций для выполнения вычислений рассмотрим задачу нахождения суммы площадей группы прямоугольников. Значение высоты и ширины прямоугольника могут быть заданы с помощью следующей конструкции de f template: (deftemplate rectangle (slot height) (slot width)) Сумму площадей прямоугольников можно определить с использованием примерно такого упорядоченного факта (sum 20) Ниже приведена конструкция def йася, содержащая информацию, которая рассматривается в качестве примера (deffacts initial-information (rectangle (height 10) (width б (height 7) (width 5)) (rectangle (height б) (width 8)) (rectangle (height 2) (width 5)) (sum 0)) Первоначальная попытка подготовить правило суммирования площадей прямоугольников может состоять в следующем С другой стороны, круглые скобки используется в языке CLIPS как разграничители, поэтому возможность применять их наравне с другими символами исключена. Для того чтобы использовать круглые скобки в фактах или передать в качестве параметров в функцию, их следует заключить в кавычки, чтобы преобразовать в строки Глава 8. Развитые средства сопоставления с шаблонами sum-rectangles (rectangle (height ?height) (width ?width)) ? sum <- (sum ?total) > (retract ?sum) (assert (sum (+ ?total (* ?height ?width))))) Но применение указанного правила приведет к созданию бесконечного цикла. Извлечение факта sum, а затем повторное его введение в список фактов приводит к возникновению цикла, в котором обрабатывается один и тот же факт rectangle. Одним из решений, позволяющих устранить эту проблему, могло бы быть извлечение факта rectangle после того, как площадь соответствующего прямоугольника будет добавлена к сумме, представленной фактом sum. Таким образом, должна быть исключена возможность запуска правила применительно к тому же факту rectangle, но к другому факту sum. Тем не менее, если факт rectangle должен быть сохранен в списке фактов, то потребуется другой подход. В частности, для каждого факта rectangle может создаваться временный факт, содержащий значение площади, которое должно складываться с общей суммой. После этого данный временный факт может быть удален и тем самым предотвращен бесконечный цикл. |