Пятница, 03.05.2024, 14:29
Приветствую Вас Гость | RSS

Язык программирования ПРОЛОГ

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

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

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

domains

      предмет     разные_вещи (вещь);

                  книга (автор, название);

                  пластинка (альюом, артист, тип);

                  имя, вещь, автор, название, артист,

                  альбом, тип = symbol

predicates

      имеет (имя, предмет)

clauses

      имеет (тои, разные_вещи (авто)).

      имеет (джон, книга («Войнич», «Овод»).

      имеет (билл, пастинка («Мадонна», Мадонна, эстрада)

   Программа использует  3 структуры: разные вещи, книга и пластинка. Все они объединены под одним именем, что позволило вывести очень простой предикат имеет (имя, предмет).

использование альтернативных доменов позволяет писать в утверждении предикат имеет применительно к разным классам. При отсутствии этой конструкции требовалось бы написать 3 предиката.

   Заметим, что термы разные_вещи, книга, пластинка являются именами структур. Однако, когда они появляются в предикатных выражениях, то одновременно играют и роль имен функторов. ТП не делает различия между функторами и доменами структур. Это средство введено в ТП преднамеренно, так как оно очень удобно именно в декларативных языках.

/* Пермещение курсора по экрану */

domains

      movement = up (step);

                  down (step);

                  left (step);

                  right (step);

                  no

      row, column, step = integer

predicates

      move_cursor (row, column, movement)

clauses

      move_cursor (R, C, up (step)):- cursor (R,C), R1=R-step, cursor (R1, C).

      move_cursor (R, C, down (step)):- cursor (R,C), R1=R+step, cursor (R1, C).

      move_cursor (R, C, left (step)):- cursor (R,C), C1=C-step, cursor (R, C1).

      move_cursor (R, C, right(step)):- cursor (R,C), C1=C+step, cursor (R, C1).

      move_cursor (R, C, no):- cursor (R,C).

   Стандартный предикат cursor (строка, столбец) (integer, integer) : (i, i) (o, o)

(i, i) – перемещение курсора в заданную позицию в текущем активном окне.

(o, o) – связь параметров строка и столбец с текущей позицией курсора.
Меню сайта
Форма входа
Поиск
Календарь
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright Long Time Ago © 2024
Сделать бесплатный сайт с uCoz