Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
учебное_пособие_флп.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
675.84 Кб
Скачать

3.2.4. Альтернативные домены

Представление данных часто требует наличия большого числа структур, эти структуры должны быть описаны. Поэтому предлагается альтернативное описание доменов. Для разделения доменов используют знак “;”.

Листинг 3.2. Использование альтернативных доменов

domains

row,column,step=integer

movement=up(step);

down(step);

left(step);

right(step)

predicates

move_cursor(row,column,movement)

clauses

move_cursor(R,C,up(Step)):-

cursor(R,C),

R1=R-Step,

cursor(R1,C),

write("movement_up\n").

move_cursor(R,C,down(Step)):-

cursor(R,C),

R1=R+Step,

cursor(R1,C),

write("movement_down\n").

move_cursor(R,C,left(Step)):-

cursor(R,C),

C1=C-Step,

cursor(R,C1),

write("movement_feft\n").

move_cursor(R,C,right(Step)):-

cursor(R,C),

C1=C+Step,

cursor(R,C1),

write("movement_right\n").

Альтернативный домен позволяет использовать предикат movevent применительно к различным классам движения курсора. Термы up, down, left, right являются именами структур. Однако,при появлении в предикатном выражении одновременно играют роль имен функторов, то есть Пролог не делает различий между функторами структур и доменными структурами. Если бы конструкция домена movement отсутствовала, то пришлось бы ввести 4 предиката.

Здесь использован стандартный предикат

cursor(Row,Column) (integer,integer) (вх, вх) ,(вых, вых):

- помещает курсор в позицию с координатами (Row,Column) (вх, вх);

- присваивает переменной Row и Column значения текущих координат курсора(вых, вых).

Выводы:

- Типы объектов данных могут быть простыми и составными. Простой объект – это константа или переменная.

- Составной объект данных позволяет рассматривать несколько частей информации как единое целое. В этом случае функтор используется для различения объектов. Функтор – это имя, а не функция. Функтор определяет вид составных объектов данных и объединяет вместе их аргументы.

- Домен можно определить как несколько альтернативных функторов (альтернативный домен).

- использование составных объектов позволяет упростить написание предикатов.

-использование альтернативных доменов позволяет сократить количество используемых предикатов.

Рассмотрение работы с составными объектами и альтернативными доменами закончено. Посмотрим, как именно строится логический вывод, реализованный на эвм?

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

3.3. Сопоставление структур(matching)

Можно рассматривать каждое утверждение программы как структуру того или иного вида:

parent(bob,tom) – это структура, и тогда

parent- функтор структуры; bob, tom-компоненты структуры.

    • Компоненты структуры заключаются в круглые скобки;

    • разделяются между собой запятыми;

    • между функтором и левой скобкой нет пробела;

    • количество компонент структуры определяет ее размерность(арность –arity)

Факты, правила, заголовки правил, цели – все они по синтаксису языка являются просто структурами:

ФАКТ- структура для утверждения;

ЦЕЛЬ – структура для вопроса.

ДВЕ СТРУКТУРЫ СОПОСТАВИМЫ, ЕСЛИ

  • они имеют один и тот же главный функтор;

  • одинаковую размерность;

  • компоненты на одинаковых позициях обеих структур сопоставимы

ДВЕ КОМПОНЕНТЫ СОПОСТАВИМЫ, ЕСЛИ:

  • обе являются константами и представляют собой одинаковый объект;

  • одна из них переменная;

  • обе являются структурами, и эти структуры сопоставимы.

СОПОСТАВЛЕНИЕ- это процесс, на вход которого подаются два терма, и идет проверка соответствия этих термов друг другу. Если термы не сопоставимы, то процесс заканчивается неудачей. Если термы сопоставимы, то процесс заканчивается успешно и в обоих термах происходит конкретизация переменных такими значениями, что оба терма становятся тождественными. Например,

dата(D, C, 2012)

| | |

data(D1, october, Y1)

Одна из конкретизаций, которая делает эти термы идентичными:

D=D1 C=october Y1=2012

Нашли конкретизацию переменных, делающих эти

термы тождественными, и процесс завершился успешно.