- •Глава 1
- •Глава 2 системы, основанные на знаниях
- •Глава 3
- •Глава 4 представление знаний
- •Глава 5 инженерия знаний
- •Глава 6
- •Часть 2
- •Variable имя_переменной
- •60 11 /Mod swap drop
- •16 Base ! ,
- •If a then или if a else в then
- •1 Of a endof
- •2 Of в endof 3 of с endof drop endcase
- •Слова literal (в), слова ; (с). Переменная ip переводится словом периода выполнения в положение сброшенного указателя
- •Глава 7 обработка списков
- •И ыный
- •Глава 8 методы программирования
- •Рекурсии)
- •Глава 9
- •Правило: имеет-волос-покров1
- •Правило: имеет-волос-покров2 (имеет-волос-покров )
- •Предложения нуль установить предложения чтсп
- •Р ис. 9.3. След поиска
- •If добавить-цели then ;
- •4 Begin (поиск)
- •10 Else
- •Глава 10
- •Глава 11
- •Begin dup ноль not
- •While r@ связь
- •If 2drop
- •If получить-цель @ найти-предложение?
- •If добавить-цели false
- •If false else false true then
- •Имёет-рыже-корич-окрас имеет-темиые-пятна ) 14
- •Глоссарий
- •Часть I. Экспертные системы - системы, основанные на знаниях
- •Часть 2. Построение систем,
Глава 6
ЯЗЫК ФОРТ - МОЩНОЕ СРЕДСТВО ПОСТРОЕНИЯ ЭКСПЕРТНЫХ СИСТЕМ
Часть 2
построение систем, основанных
на знаниях
С оздание систем, основанных на знаниях, является в большей степени искусством, чем наукой, поэтому их качество во многом зависит от уровня практических навыков разработчика. Во второй части книги основное внимание сосредоточено на описании деталей программной реализации экспертных систем. С этой целью мы во- спользовались языком Форт - достаточно распространенным и лег- ким в освоении программным средством. Гл. 6 знакомит читателя с языком Форт, на базе которого в дальнейшем ведется изложение методов программирования экспертных систем. Гл. 7 посвящена обработке списков - основному элементу программ, предназначен- ных для решения задач искусственного интеллекта. В гл. 8 рас- сматриваются некоторые из более сложных методов, применяемых при разработке таких программ. Затем с помощью введенных по- нятий описывается процесс построения ядра системы, основанной на знаниях, - интерпретатора продукций, аналогичного интерпре- татору языка Пролог, и приводится подробное объяснение всех ключевых моментов данного процесса. В заключение (гл. 10 и 11) обсуждаются некоторые новые результаты в области искусственно- го интеллекта, не связанные с построением Пролог-системы. Уп- ражнения, которые приведены в конце каждой главы, помогут читателю приобрести необходимые навыки в составлении программ для решения задач искусственного интеллекта.
Деннис Фохт
Программы, реализующие экспертную систему, могут быть составлены практически на любом языке программирования. Интерпретатор продукций и базу знаний можно построить даже с помощью таких языков-"ветеранов", как Бейсик и Фортран. Современные языки, в частности Си, Паскаль и Модула-2, облада- ют в этом отношении большими возможностями, однако и они не совершенны с точки зрения задач искусственного интеллекта. Дело в том, что ни один из них не располагает структурами данных, позволяющими эффективно представлять знания, а также поддер- живать процессы доступа, обновления и логического вывода на знаниях.
Средствами специализированных языков искусственного ин- теллекта факты и правила представляются более легко и естест- венно. При работе с ними программист получает возможность рас- суждать в терминах решаемой задачи, а не конструкций и опера- торов Языка программирования. Среди таких языков по наилучше- му представлению предметной сущности задачи следует выделить Пролог и Смоллток. Один из старейших языков - Лисп - до сих пор не утратил своей популярности, несмотря на то, что по возрас- ту он не уступает Фортрану.
Язык Лисп более универсален, чем Пролог или Смоллток, по- скольку его функции обеспечивают выполнение обработки данных на более низком уровне. Основным назначением Лиспа считается обработка списков. Поскольку список - это достаточно общая и естественная структура для выражения знаний, средствами Лиспа могут быть построены самые разнообразные модели представления знаний и механизмы вывода. Именно благодаря своей гибкости и богатой истории Лисп продолжает оставаться в США основным языком построения систем искусственного интеллекта.
Основное внимание на протяжении нескольких последующих глав будет уделено Форту, который был разработан в начале семидесятых годов как язык для управления процессами в реаль- ном масштабе времени. Однако популяризироваться специальной Рабочей группой по языку Форт (Fort Interest Group - FIG) южнее Сан-Франциско он начал только в конце семидесятых, когда его сторонники создали версии трансляторов, работающих на универ- сальных компьютерах. Компанией General Electric на Форте разра- ботана экспертная диагностическая система, предназначенная для поиска неисправностей в локомотивах.
113
Форт был выбран в качестве средства, с помощью которого объясняются детали программной реализации систем, основанных на знаниях, по следующим причинам: во-первых, транслятор с этого языка имеется практически на всех типах микрокомпьюте- ров, во-вторых, он достаточно дешевый, и, наконец, имеет много общего с языками искусственного интеллекта, в частности с Лис- пом. В гл. 7 описывается расширение языка Форт, приближающее его по своим возможностям к Лиспу, а в приложении А приведены листинги Форт-программ.
В последующих главах мы рассмотрим элементы Лиспа, Про- лога и Смоллтока, причем основное внимание сосредоточим на особенностях этих языков, позволяющих применять их для реше- ния задач искусственного интеллекта. Язык Форт будет описан в деталях, поскольку с его помощью объясняется процесс программи- рования основных элементов экспертной системы, и в дальнейшем нам придется достаточно часто обращаться к нему. Существует ряд изданий, которые содержат более полное изложение Форта и могут быть рекомендованы для углубленного изучения этого языка. Их список приведен в конце нашей книги'.
Главными достоинствами языка Форт как средства разработки систем, основанных на знаниях, являются его широкие выразите- льные возможности, интерактивное исполнение программ, наличие интерпретирующей среды и концептуальная ясность. К недостат- кам Форта следует отнести необходимость уделять большее, чем в других языках, внимание деталям реализации программ, особенно при работе с переменными, передаваемыми через стек.
СЛОВА И СЛОВАРЬ ЯЗЫКА ФОРТ
Форт - высокоинтерактивный язык интерпретирующего типа. Его словарь содержит слова, которые соответствуют либо процеду- рам, либо данным, причем и те, и другие могут выполняться. Ини- циирование слова приводит к вызову связанной с ним процедуры. Процедуру, реализующую слово, можно рассматривать как его ин- терпретацию, поскольку в ней заданы предписываемые этим сло- вом действия.
Форт включает в себя базовый набор слов, причем некоторые из них могут использоваться для создания новых слов. Такие слова называются определяющими. В ходе разработки Форт-программы для задания новых слов обычно применяются несколько определя- ющих слов. Наиболее распространенным из них считается слово
Д ля изучения Форта можно также порекомендовать следующие книги, вышедшие на русском языке: Баранов С.Н., Ноздрунов Н.Р. Язык Форт и его реализации. - Л.: Машиностроение, 1988; Броуди Л. Начальный курс программирования на языке Форт. - М.: Финансы и статистика, 1989.
114
":" (двоеточие), которое служит для определения процедуры. Син- таксис задания нового слова таков:
: имя_слова определение ;
Здесь имя определяемого слова следует сразу за двоеточием.
В Форте пробел используется в качестве разделителя слов. Поскольку двоеточие является словом, оно отделяется от имени определяемого слова пробелом. После имени находится последова- тельность уже определенных слов, выполнение которых в заданном порядке и составляет действие, связываемое с новым словом. За- канчивается определение словом ";" (точка с запятой), служащим признаком завершения данного определения через двоеточие.
Двоеточие - не единственное определяющее слово в языке форт, к этому же типу относятся слова CODE (код), VARIABLE (переменная) и CONSTANT (константа). Слово CODE применяет- ся для включения в Форт-программу текста на языке ассемблера. В большинстве реализаций для этого применяется ассемблер Форт- системы. Синтаксис слова CODE:
CODE имя_слова ассемблерный_код END-CODE
(Иногда после ассемблерного кода может стоять символ С - сино- ним слова END_CODE). Возможность включения ассемблерного кода очень важна для решения задач искусственного интеллекта, поскольку позволяет заменять часто выполняемые части програм- мы (такие, как интерпретатор продукций) непосредственно ассемб- лерным кодом, что повышает эффективность программ. После того как построение алгоритма нового слова завершено точкой с запя- той (т.е. высокоуровневыми средствами определения слова), оно может быть переведено на язык ассемблера и включено в програм- му словом CODE. Таким образом, в Форте имеется весьма широ- кий спектр возможностей для представления алгоритма на разных уровнях абстракции - от языка ассемблера до проблемно-ориенти- рованных языков, построенных путем определения необходимых слов.
Два других стандартных определяющих слова служат для соз- дания переменных и констант и аналогичны операторам описания типов данных в традиционных языках программирования. Слово VARIABLE (переменная) создает новую переменную, его синтаксис таков: