дб. Четвертое издание джозеф Джарратано Университет Хьюстон клиэрЛэйк Гари Райли People5oft, Издательский дом "Вильямс" Москва СанктПетербург Киев 2007 ббк 32. 973. 26 018 75 Д
Скачать 3.73 Mb.
|
Обозначения первого типа относятся к символами знакам, которые должны быть введены точно так, как они показаны к ним относятся любые текстовые надписи, не заключенные в пару знаков <>, [ ] или ( ). Например, рассмотрим следующее описание синтаксиса. Система обозначений 555 или (example -20) или многими другими результатами ввода, в которых содержатся знаки " (example ", за этими знаками следует целое число, аза ним знак ) . Важно отметить, что пробелы, показанные в описании синтаксиса, также должны быть включены в результат ввода. Еще один вариант обозначения характеризуется использованием звездочки, *, которая следует за описанием. Такое обозначение показывает, что описание может быть заменено вхождениями указанного значения в количестве от нуля или больше. После каждого вхождения некоторого значения должны быть проставлены пробелы. Например, следующее описание синтаксиса 3 или любым другим количеством разделенных пробелами целых чисел, или же вообще оставлено пустым. Описание, за которым следует знак "плюс, +, указывает, что вместо этого описания синтаксиса должно быть введено одно или несколько значений, заданных этим описанием. Необходимо отметить, что следующее описание синтаксиса some может быть заменено таким результатом ввода all или таким попе или таким some Вертикальная черта, , указывает на необходимость выбора одного или нескольких элементов, разделенных вертикальными чертами. Например, следующее описание синтаксиса: Глава 7. Введение в CLIPS 556 7.4 Поля 1.5 1 ° 0 0.7 е 3.5е10 А следующие примеры показывают допустимые целые числа 1 +3 -1 65 Символ — это поле, которое начинается с пригодного для печати знака кода ASCII и сопровождается другими пригодными для печати знаками в количестве от нуля или больше. Конец символа достигается при обнаружении разграничителя. К разграничителям относятся любые непечатаемые знаки кода ASCII (включая пробелы, знаки табуляции, знаки возврата каретки и перевода строки, знак "двойная кавычка, знак ( (открывающая круглая скобка, знак закрывающая круглая скобка, знак (точка с запятой, знак & (амперсанд), знак ! (вертикальная В процессе создания базы знаний интерпретатор CLIPS считывает входные данные с клавиатуры и из файлов, чтобы выполнить команды и загрузить программу. По мере считывания отдельных знаков с клавиатуры или из файлов интерпретатор CLIPS группирует эти знаки в лексемы. Лексемы представляют собой группы знаков, имеющих в языке CLIPS особый смысл. Некоторые лексемы, такие как левая и правая круглые скобки, состоят только из одного знака. Особое значение имеет группа лексем, называемых полями. В языке CLIPS предусмотрено восемь типов полей, которые принято также называть примитивными типами данных число с плавающей точкой, целое число, символ, строка, внешний адрес, адрес факта, имя экземпляра и адрес экземпляра. Поля первых двух типов, числа с плавающей точкой и целые числа, называются числовыми полями, или просто числами. Числовое поле может состоять из трех частей знак, значение и показатель степени. Знаки показатель степени являются необязательными. В качестве знака может быть указан + или —. Значение состоит из одной или нескольких цифр, между которыми может находиться единственная необязательная десятичная точка. Показатель степени состоит из буквы е или Е, за которой следует необязательный знак + или —, сопровождаемый одной или несколькими цифрами. Любое число, состоящее из необязательного знака + или —, за которым следуют только цифры, записывается в память в виде целого числа. Все другие числа хранятся как числа с плавающей точкой. Ниже приведены примеры допустимых чисел с плавающей точкой CLIPS. 7.4. Поля 557 черта, знак - (тильда) и знак < (меньше. Символы не могут содержать разграничителей (за исключением знака который может быть первым знаком в символе. Кроме того, знак? и последовательность знаков ? (вопросительный знаки знак доллара с вопросительным знаком) нельзя помещать в начало символа, поскольку они используются для обозначения переменных (см. раздел 7.19). К тому же как символ рассматривается последовательность знаков, которые не соответствуют точно формату числового поля. Ниже приведены примеры допустимых символов. Space-Station February fire activate sprinkler system notify-fire-department shut-down-electrical- junction-387 рул* В 346 — 95-6156 Обратите внимание на то, как используются знаки подчеркивания и дефисы для соединения символов друг с другом и преобразования их водно поле. Интерпретатор CLIPS сохраняет в неизменном виде прописные и строчные буквы, обнаруженные им в лексемах. Таким образом, язык CLIPS предусматривает проведение различий между буквами верхнего и нижнего регистров, поэтому называется чувствительным к регистру. Например, такие символы рассматриваются в языке CLIPS как различные саяе- sensitive Саяе-Sensitive САЯЕ-SENSITIVE Следующим типом поля является строка. Строка должна начинаться и заканчиваться двойными кавычками, которые являются частью поля. Между двойными кавычками могут находиться от нуля и больше знаков, включая те, которые обычно используются в языке CLIPS как разграничители. Ниже приведены примеры допустимых строки) рфли "John Q. Public" Пробелы обычно используются в языке CLIPS как разграничители для разделения полей (таких как символы) и других лексем. Дополнительные пробелы, присутствующие между лексемами, отбрасываются. Но пробелы, входящие в со Глава 7. Введение встав строки, сохраняются. Например, в языке CLIPS следующие четыре строки рассматриваются как различные "spaces" "spaces spaces" spaces "three — tokens" обрабатывается интерпретатором как три отдельные лексемы следующим образом, поскольку двойные кавычки рассматриваются и как обозначения строки как разграничители three-tokens II И Двойные кавычки можно включать в строку с использованием знака операции переключения на другой режим обработки, те. обратной косой черты, 1. Например, следующая строка "обрабатывается интерпретатором CLIPS как такое строковое поле ""single-token"" При этом создается только одно поле, поскольку знак обратной косой черты исключает возможность обработки следующей за ним двойной кавычки как разграничителя. Сам знак обратной косой черты может быть задан в строке с использованием двух подряд идущих знаков обратной косой черты. Например, строка "обрабатывается интерпретатором CLIPS как такое строковое поле "Nsingle-tokens" Во вступительном описании программных возможностей языка CLIPS поле следующего типа, внешний адрес, еще нельзя представить достаточно подробно. Поле внешнего адреса содержит адрес внешней структуры данных, возвращаемой функцией, определяемой пользователем (функция, написанная на таком языке, Если бы окружающие строку двойные кавычки были удалены, то интерпретатор рассматривал бы каждую из этих строк ввода как содержащую один и тот же символ, поскольку все пробелы, отличные от тех, которые используются в качестве разграничителей, игнорируются. Еще раз отметим, что двойные кавычки применяются для обозначения начала и конца строк, поэтому двойные кавычки нельзя непосредственно помещать в саму строку. Например, строка. Входи выход из системы CLIPS 559 как С или Ada, и присоединенная с помощью редактора связей к интерпретатору в целях приобретения дополнительных функциональных возможностей. Безусловно, значение внешнего адреса невозможно задать с помощью последовательности знаков, образующих лексему, а основная немодифицированная версия не содержит функций, возвращающих внешние адреса, поэтому в основной немодифицированной версии невозможно создать поле такого типа. Оставшимися тремя типами полей являются адрес факта, адрес экземпляра и имя экземпляра. Как будет вскоре описано, факты относятся к одному из тех сложных представлений данных, которые предусмотрены в языке CLIPS. Адрес факта используется для получения ссылки на конкретный факт. Как и внешний адрес, адрес факта не может быть задан с помощью последовательности знаков, образующей лексему. Но предусмотрена возможность получать адреса фактов с помощью правил в составе процесса сопоставления с шаблонами. Синтаксические конструкции, применяемые для обеспечения такого действия, рассмотрены в разделе 7.21. Еще одним сложным представлением данным, предусмотренным в языке CLIPS, являются экземпляры, которые рассматриваются более подробно в главе 11. На экземпляры можно ссылаться с использованием либо адреса экземпляра, либо имени экземпляра. Адрес экземпляра подобен адресу факта, но ссылается на экземпляра не на факт. Предусмотрена также возможность ссылаться на экземпляр с помощью имени. Имя экземпляра — это символ специального типа, который заключен в левую и правую квадратные скобки. Например, [pump — представляет собой имя экземпляра. Ряды, состоящие из полей, содержащихся вместе водной синтаксической позиции в количестве от нуля и больше, называются многозначным значением. Многозначные значения обычно создаются путем вызова некоторой функции (как будет показано в следующих главах) или путем задания ряда полей. Вовремя вывода на внешнее устройство многозначное значение заключается в левую и правую круглые скобки. Например, многозначное значение нулевой длины выводится следующим образом а многозначное значение, содержащее символы this и выводится так (this that) 7.5 Входи выход из системы CLIPS В систему CLIPS можно войти путем выдачи соответствующей команды вызова интерпретатора на выполнение для компьютера, на котором установлена система CLIPS. После этого должно появиться приглашение CLIPS, которое выглядит следующим образом Глава 7. Введение в CLIPS CLIPS> С этого момента появляется возможность непосредственно вводить команды в систему CLIPS; этот режим называется режимом верхнего уровня. Нормальный способ выхода из системы CLIPS состоит в применении команды exit. Эта команда имеет следующий синтаксис (exit) Обратите внимание на то, что символ exit заключен в согласованные (парные) круглые скобки. Многие языки, основанные на правилах, происходят от языка LISP, в котором в качестве разграничителей применяются крутые скобки. Атак как CLIPS основан на языке, первоначально разработанном с помощью машин LISP, в нем сохранились те же разграничители. Символ exit без охватывающих круглых скобок имеет совсем не такой смысл, как символ exit с охватывающими круглыми скобками. Круглые скобки вокруг слова exit указывают на то, что exit — команда, подлежащая выполнению, а непросто символ. Как будет показано ниже, круглые скобки служат в качестве важных разграничителей для команд. А на данный момент важно запомнить лишь то, что каждая команда CLIPS должна иметь согласованное количество левых и правых круглых скобок. Окончательный этап вызова на выполнение команды CLIPS после ее ввода со сбалансированным должным образом количеством круглых скобок состоит в нажатии клавиши ввода. Клавиша ввода может быть также нажата доили после ввода любой лексемы. Например, нажатие клавиши ввода после нажатия на клавиатуре знаков "ех", но до нажатия знаков "it", приводит к созданию двух лексем лексемы, соответствующей символу ех, и лексемы для символа it. Ниже приведена последовательность команд, которая демонстрирует пример сеанса, состоящего из этапов входа в систему CLIPS, обработки значения поля константы, вычисления функции, а затем выхода с помощью команды exit. Показанный пример относится к той ситуации, когда используется персональный компьютер класса IBM с операционной системой MS-DOS, на котором исполняемый файл CLIPS хранится на гибком диске, установленном в дисководе А, причем текущим дисководом также является А. Подразумевается, что исполняемый файл CLIPS имеет имя. Вывод, отображаемый операционной системой MS- DOS или системой CLIPS, показан обычным шрифтом. С другой стороны, все входные данные, которые должны быть набраны пользователем, показаны полужирным шрифтом, а нажатие клавиши ввода обозначено знаком Следует помнить, что язык чувствителен к регистру, поэтому важно, чтобы буквы верхнего и нижнего регистров вводились так, как они показаны в примерах. А CLIPS (V6.22 06/15/04) CLIPS> exitJ 561 7.6. Факты exit CLIPS> (+ 3 4) ! 7 CLIPS> (exit)J А Работая в режиме верхнего уровня, система CLIPS принимает входные данные от пользователя и осуществляет попытки обработать эти входные данные, чтобы правильно определить соответствующий ответ. Поля, введенные без какой-либо сопровождающей информации, рассматриваются как константы, а результатом обработки константы становится сама константа. Поэтому после ввода отдельно взятого символа exit, зачем следует нажатие клавиши ввода, интерпретатор обрабатывает эти входные данные ив качестве результата отображается символ exit. А символ, заключенный в круглые скобки, рассматривается как команда или вызов функции. Таким образом, результатом ввода данных (+ 3 4) становится вызов функции +, которая осуществляет сложение. Параметрами этой функции являются значения 3 и 4. Возвращаемым значением для данного вызова функции является значение возвращаемые значения будут рассматриваться более подробно в главе 8). Наконец, в результате ввода данных ( exit вызывается команда exit, выполнение которой приводит к выходу из системы CLIPS. Термины "функция" и "команда" следует рассматривать как взаимозаменяемые. Кроме того, во всей оставшейся части книги термин "функция" используется для указания на то, что происходит возврат некоторого значения, а термин "команда для того чтобы показать, что либо не происходит возврат значения, либо соответствующее действие обычно выполняется после ввода данных в приглашении верхнего уровня. 7.6 Факты (person (name "John Q. Public" ) (age 23) (еуе-color blue) (hair-color black)) Весь факт, как и каждый слот, ограничивается открывающей (левой) круглой скобкой и закрывающей (правой) круглой скобкой. Символ person представляет Для успешного решения задачи программе должны быть предоставлены данные, или информация, на основании которых программа могла бы формировать рассуждения. "Фрагменты" информации, применяемые в языке, называются фактами. Факты состоят из имени отношения (символического поля, за которым следует от нуля и больше слотов (также символических полей) и связанных сними значений. Пример факта приведен ниже. Глава 7. Введение в CLIPS 562 (age 23)) Конструкция de f template Прежде чем появится возможность создать факт, интерпретатору CLIPS необходимо сообщить информацию о том, каковым является список допустимых слотов для отношения с указанным именем. Группы фактов, объединяемых под одними тем же именем отношения и содержащих общую информацию, можно описать с использованием конструкции deftemplate. Конструкции образуют ядро программы поскольку вводят знания программиста в среду CLIPS, и этим отличаются от функций и команд. Конструкция deftemplate аналогично структуре записи в таких языках, как Pascal. Общий формат конструкции de f template является таковым (deftemplate использованием этого синтаксиса факт person можно описать с помощью следующей конструкции de f template: (deftemplate person "An example deftemplate" (slot name) (slot age) (slot еуе- color) (slot hair-color)) собой имя отношения для рассматриваемого факта, асам факт содержит четыре слота (имя, age (возраст, еуе — color (цвет глаз) и hair — цвет волос. Значением слота пате является "John Q. значением слота age — число 23, значением слота еуе-color — blue, а значением слота hair — color — black. Следует отметить, что порядок, в котором заданы слоты, не имеет значения. В частности, следующий факт рассматривается интерпретатором как идентичный первому приведенному факту person: (person (hair-color black) (name "John Q. Public" ) (еуе-color blue) 563 7.6. Факты Многозначные слоты (person (name John Q. Public) (age 23) (еуе-color blue) (hair-color brown)) Любая конструкция de f template может содержать любую комбинацию однозначных и многозначных слотов. Упорядоченные факты Факты с именем отношения, имеющие соответствующую конструкцию deftemplate, называются фактами с конструкцией deftemplate. С другой стороны, факты с именем отношения, не имеющие соответствующей конструкции называются упорядоченными фактами. Под этим подразумевается, что упорядоченные факты имеют единственный многозначный слот, используемый для хранения всех значений, следующих за именем отношения. В действительности при обнаружении интерпретатором каждого упорядоченного факта автоматически создается подразумеваемая конструкция deftemplate для этого факта (в отличие от явной конструкции deftemplate, создаваемой с применением определения de f template). Любой упорядоченный факт имеет только один слот, поэтому при определении такого факта имя слота не требуется. Например, с помощью следующего факта может быть представлен список чисел 7 9 3 4 20) По существу это определение эквивалентно определению такой конструкции deftemplate: (deftemplate number-list (multislot values)) Допускается, чтобы слоты факта, которые были заданы с помощью ключевого слова slot в соответствующих им конструкциях deftemplate, содержали только одно значение (такие слоты называются однозначными слотами. Тем не менее часто возникает необходимость поместить в какой-то конкретный слот от нуля и больше полей. Допускается, чтобы слоты факта, которые были заданы с помощью ключевого слова multislot в соответствующих конструкциях de f template, содержали от нуля и больше значений (такие слоты называются многозначными слотами). Например, в слоте пате конструкции de f template person имя данного лица хранится как единственное строковое значение. А |