Главная
»
Информационные системы
»
Представление знаний в ИС
»
Язык Prolog. Сложные термы, или структуры.
Язык Prolog. Сложные термы, или структуры.
Структурные объекты (или просто структуры) – это объекты, которые состоят из нескольких компонент. Эти компоненты в свою очередь могут быть структурами. Например, дату можно рассматривать как структуру, состоящую из трех компонент: день, месяц, год. Хотя они и составлены из нескольких компонент, структуры в программе ведут себя как единые объекты. Для того, чтобы объединить компоненты в структуру, требуется выбрать функтор. Для нашего примера подойдет функтор date. Тогда дату 1-е мая 1983 г. можно записать так.
date (1, may, 1983).
Все компоненты в данном примере являются константами (две компоненты- целые числа и одна- атом). Компоненты могут быть также переменными или структурами. Произвольный день в мае можно представить структурой
date (Day, may, 1983).
Заметим, что Day является переменной и ей можно приписать произвольное значение на некотором более позднем этапе вычислений.
Синтаксически все объекты данных в Прологе представляют собой термы. Например,
May
и
date(1, may, 1983)
суть термы.
Следующий пример показывает, как можно использовать структуры для представления геометрических объектов.
Точка в двумерном пространстве определяется двумя координатами; отрезок двумя точками, а треугольник можно задать тремя точками. Введем следующие функторы:
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) (как впрочем и любые другие объекты), то функтор, служащий корнем дерева называется главным функтором терма.
Рис. 8. Представление объектов с рис. 7 в виде деревьев
Если бы в такой же программе фигурировали точки трехмерного пространства, то можно было бы для их представления использовать другой функтор, например:
Tochka3 (X, Y, Z)
Можно, однако, воспользоваться одним и тем же именем tochka одновременно и для точек двумерного и для точек трехмерного пространств и написать, например, так
tochka (X1, Y1) и tochka (X, Y, Z)
Если одно и то же имя появляется в программе в двух различных смыслах, как в вышеупомянутом примере с точкой, то поролог-система будет различать их по числу аргументов и интерпретировать это имя как два функтора: один – двухаргументный; второй – трех. Это возможно потому, что каждый функтор определяется двумя параметрами:
1) именем, синтаксис которого совпадает с синтаксисом атомов;
2) арностью – т.е. числом аргументов.
Все структурные объекты в Прологе – это деревья, представленные в программе термами. Рассмотрим еще два примера, чтобы понять насколько удобно сложные объекты данных представляются с помощью прологовских термов. На рис. 9 показано древовидная структура, соответствующая арифметическому выражению (а+в)*(с-5)
Этот, совершенно правильный прологовский терм, конечно не соответствует той форме, которую нам хотелось бы иметь при записи арифметических выражений. Хотелось бы применять обычную инфиксную запись принятую в математике.
Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.