» » »

Язык Prolog. Сложные термы, или структуры.

Структурные объекты (или просто структуры) – это объекты, которые состоят из нескольких компонент. Эти компоненты в свою очередь могут быть структурами. Например, дату можно рассматривать как структуру, состоящую из трех компонент: день, месяц, год. Хотя они и составлены из нескольких компонент, структуры в программе ведут себя как единые объекты. Для того, чтобы объединить компоненты в структуру, требуется выбрать функтор. Для нашего примера подойдет функтор date. Тогда дату 1-е мая 1983 г. можно записать так.

date (1, may, 1983).

Все компоненты в данном примере являются константами (две компоненты- целые числа и одна- атом). Компоненты могут быть также переменными или структурами. Произвольный день в мае можно представить структурой

date (Day, may, 1983).

Заметим, что Day является переменной и ей можно приписать произвольное значение на некотором более позднем этапе вычислений.

Синтаксически все объекты данных в Прологе представляют собой термы. Например,

May

и

date(1, may, 1983)

суть термы.

Следующий пример показывает, как можно использовать структуры для представления геометрических объектов.

 src=img/14-2-1.jpg

 

Точка в двумерном пространстве определяется двумя координатами; отрезок двумя точками, а треугольник можно задать тремя точками. Введем следующие функторы:

tochka для точек

otrezok для отрезков и

treugolnik для треугольников

Тогда объекты представленные на Рис. 7. можно представить следующими прологовскими термами:

P1 = tochka (1, 1)

P2 = tochka (2, 3)

S = otrezok (P1, P2) =

otrezok (tochka (1, 1), tochka (2, 3))

T = treugolnik (tochka (1, 1), tochka (7, 1), tochka (6, 4))

Если представить эти объекты в виде деревьев (Рис. 8) (как впрочем и любые другие объекты), то функтор, служащий корнем дерева называется главным функтором терма.

 src=img/14-2-2.jpg

Рис. 8. Представление объектов с рис. 7 в виде деревьев

 

Если бы в такой же программе фигурировали точки трехмерного пространства, то можно было бы для их представления использовать другой функтор, например:

Tochka3 (X, Y, Z)

Можно, однако, воспользоваться одним и тем же именем tochka одновременно и для точек двумерного и для точек трехмерного пространств и написать, например, так

tochka (X1, Y1) и tochka (X, Y, Z)

Если одно и то же имя появляется в программе в двух различных смыслах, как в вышеупомянутом примере с точкой, то поролог-система будет различать их по числу аргументов и интерпретировать это имя как два функтора: один – двухаргументный; второй – трех. Это возможно потому, что каждый функтор определяется двумя параметрами:

1)                именем, синтаксис которого совпадает с синтаксисом атомов;

2)                арностью – т.е. числом аргументов.

Все структурные объекты в Прологе – это деревья, представленные в программе термами. Рассмотрим еще два примера, чтобы понять насколько удобно сложные объекты данных представляются с помощью прологовских термов. На рис. 9 показано древовидная структура, соответствующая арифметическому выражению (а+в)*(с-5)

 src=img/14-2-3.jpg

 

Этот, совершенно правильный прологовский терм, конечно не соответствует той форме, которую нам хотелось бы иметь при записи арифметических выражений. Хотелось бы применять обычную инфиксную запись принятую в математике.


Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.