Обработка списков и строк символов
Список в Прологе представляется множеством элементов, разделенных запятой и ограниченных квадратными скобками. Пример: X=[a, b, c, d]. Для разделения списка на части используется предикат " ½ ". Он делит список на " голову" и " хвост" (подсписок, являющийся исходным списком без элементов головы). Так, если 1) X=[a, b, c, d] и X=[Y ½ Z], то, например, Y=a (здесь в качестве головы берется только первый элемент исходного списка), Z=[b, c, d]; 2) X=[a] и X=[Y ½ Z], то Y=a, Z=[ ] - пустой подсписок. Принадлежность элемента списку. Принадлежность элемента X списку Y записывается в виде предиката принадлежит(X, Y). Для определения истинности этого предиката вначале проверяется идентичность X и первого элемента списка Y. Если они совпадают, то можно записать: принадлежит (X, [X ½ _ ]), где " _" -анонимная переменная, соответствующая остальной части списка Y завычетом его первого элемента, равного X. Если идентичности X и первого элемента списка Y нет, просматривается хвост “_” списка Y на предмет наличия в нем X, что оформляется как принадлежит (X, [_ ½ Z]), где “_” – уже первый элемент списка Y, а Z – остальная его часть-хвост. Поскольку анализ хвоста проводится вначале тоже путем проверки идентичности X и первого элемента подсписка Z, то можно записать правило: принадлежит (X, [_ ½ Z]): - принадлежит (X, Z). Ясно, что программа приходит к решению первоначальной задачи: принадлежит(X, [X ½ _ ]), где “_” – соответствует списку Z завычетом его первого элемента. Программа работы оказывается рекурсивной: 10 принадлежит(X, [X ½ _ ]). 20 принадлежит (X, [_ ½ Z]): - принадлежит (X, Z). Пример. Имеется запрос: принадлежит(седло, [руль, рама, колесо, седло]). Процедура поиска решения имеет следующий порядок. Первый цикл. Унификация начального состояния стека вопросов выводится с помощью правила R, то в сети имеется дуга, которая соединяет вершины G и R от G к R. Пример сети вывода с правилами П1-П3 показан на рис 9.1: П2: Если ТВ Ú РВ то ОС, П3: Если ТБ Ú АШ то РВ.
Рис. 9.1. Сеть вывода
При решении конкретной задачи (режим консультации) с помощью сети делается попытка найти в сети вывода путь от вершин, представляющих исходные данные (например, наличие тяжелой формы бронхиальной астмы в сочетании с высокой травматичностью) к вершине выбранной цели (предполагаемая необходимость общего обезболивания). Если такое возможно, цель считается достигнутой (в нашем случае допустимые связи в сети через правила П1 и П3 имеются, цель разрешена). Расширением возможностей оболочки ЭКО является подсистема К-ЭКО. Представление знаний в ней основано на фреймовой модели. Общие знания о сущностях реального мира представляются с помощью аналогов фреймов - классов объектов, объединяющих атрибуты (характеристики) и методы (правила). Конкретные знания представляются с помощью экземпляров объектов (фактов). Другая подсисема - ИЛИС ЭКО позволяет делать индуктивные обобщения в проблемной среде.
|