Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Таунсенд Проектирование и программная реализац...doc
Скачиваний:
15
Добавлен:
12.11.2019
Размер:
4.53 Mб
Скачать

Глава 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 (переменная) создает новую переменную, его синтаксис таков: