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 значения текущих координат курсора(вых, вых).
Выводы:
- Типы объектов данных могут быть простыми и составными. Простой объект – это константа или переменная.
|
|
- Составной объект данных позволяет рассматривать несколько частей информации как единое целое. В этом случае функтор используется для различения объектов. Функтор – это имя, а не функция. Функтор определяет вид составных объектов данных и объединяет вместе их аргументы.
- Домен можно определить как несколько альтернативных функторов (альтернативный домен).
- использование составных объектов позволяет упростить написание предикатов.
-использование альтернативных доменов позволяет сократить количество используемых предикатов.
Рассмотрение работы с составными объектами и альтернативными доменами закончено. Посмотрим, как именно строится логический вывод, реализованный на ЭВМ?
Начнем с рассмотрения алгоритма унификации, который составляет основу вычислительной модели логических программ (реализует механизм упрощения).