Скачиваний:
24
Добавлен:
01.05.2014
Размер:
356.35 Кб
Скачать

Представление знаний при помощи языка Си

Для того чтобы более четко проиллюстрировать то, какие преимущества дает программисту использование вычислительного формализма при представлении знаний, рассмотрим, как на процедурном языке (например, на языке Си) можно составить программу, предназначенную для представления знаний. Сам по себе язык Си не является вычислительным формализмом. Поэтому win того, чтобы воспользоваться этим языком при представлении знаний, необходимо реализовать такой формализм в рамках языка Си. В типичной Си-программе для этого требуется:

1) определение структур данных, конкретные экземпляры которых будут использоваться дня описания структуры системы, и

2) составление процедур, предназначенных для выполнения вычислительных операций над экземплярами структур данных, иными словами, доя придания описаниям определенного формального смысла.

Неопытный программист, пользующийся языком Си, стремится изобретать новые формализмы для каждой новой области применения (т.е. для каждой представляемой системы). В результате этого тип формального смыслового значения, реализуемого процедурами программы, будет сильно зависеть от конкретных особенностей представляемой системы Обратите внимание на то, насколько сильно это отличается от языка Про лог- символическое обозначение отношения в Пролог - программе имеет один и тот же тип формального смыслового значения независимо от того какая система представляется- Самым большим недостатком введения новых формализмов для каждой новой области применения является то, что лицу, пытающемуся прочитать программу, потребуется изучить как ее формализм, так и описание системы, ревизованное структурами данных этой программы.

С другой стороны, опытный программист, работающий с языком Си разработает формализм только для одной области применения, а затем попытается использовать его в максимально возможной степени в других областях - просто потому, что это сэкономит много сил при сопровождении программы. На языке Си можно ревизовать весьма мощны формализмы. Примерами таких формализмов могут служить инструментальное средство "уасс" операционной системы UNIX, а также реализации Пролога, написанные на языке Си.

Расширение языка Пролог

Взгляд на Пролог как на формализм, предназначенный для представления знаний, является слишком большим упрощением, так как при этом не учитываются ни побочные эффекты, ни процедурная семантика Пролога. Сейчас целесообразно дать более точное определение дескриптивного языка и обрабатывающей структуры Пролога.

Фразы, не имеющие побочных эффектов, обладают четким декларативным смыслом. Их следует рассматривать как часть дескриптивного языка-Пролога. Побочные эффекты (такие как встроенные предикаты "сократить", "assert", "retract", "fail" и т.д.) — это строго процедурные элементы Пролога, используемые для управления стратегией решения задач интерпретатора. Поэтому фразы, в состав которых входят побочные эффекты, приобретают осмысленность только при процедурном прочтении. Некоторые процедуры общего назначения, такие как "findall", выполняют вычисления, которые невозможны в Прологе без использования побочных эффектов. Поэтому такие процедуры можно рассматривать как расширение обрабатывающей структуры Пролога.

Интересно отметить, что ,несмотря на то, что в телах правил, определяющих процедуру "findall", применяются побочные эффекты, вызов процедуры "findall" обладает декларативным смыслом. Иными словами, вызов процедуры "findall" объявляет отношение между запросом и всеми, ответами на него, которые можно получить в соответствии с текущей программой. Выше отмечалось, что обрабатывающая структура формализма — это множество процедур, способное реализовать формальный смысл описания, записанного на дескриптивном языке формализма. Добавление процедуры "findall" к обрабатывающей структуре Пролога расширяет диапазон возможных формальных смысловых значений дескриптивного языка Пролога. Вызов процедуры "findall" является дескриптивным элементом. Он может быть подцелью фразы, являющейся в других отношениях декларативной, при этом декларативная семантика данной фразы не будет нарушена. Процедура "findall " ни в какой степени не зависит от конкретной области применения и, будучи реализованной один раз, она может быть неоднократно использована во многих прикладных программах.

Однако когда побочные эффекты применяются во фразах, ориентированных на конкретные приложения, то различие между дескриптивным языком Пролога и его обрабатывающей структурой исчезает. Фразы этого типа можно тоже рассматривать как расширение обрабатывающей структуры Пролога, но только ориентированное на конкретное применение. В определенном смысле программист, пишущий такие фразы, изобретает формализм специально для избранной области применения, по во многом походит на то, как начинающий программист, работающий с языком Си, создает новые формализмы для каждой новой области применения. Такие фразы не удается повторно использовать при переходе от одной области применения к другой, поэтому они в некоторой мере подрывают свойства Пролога как формализма.

Для того чтобы сохранить ясность Пролога как формализма, при практическом программировании рекомендуется следующее:

1) делать все фразы, ориентированные на конкретную область применения, чисто декларативными и

2) сводить в отдельные общецелевые процедуры те вычисления, которые можно выполнить только с применением побочных эффектов.

Стиль программирования на языке Пролог более подробно обсуждается в разд, 7.5.

Соседние файлы в папке Гл.6,7,Прилож.,Допол