logo search
TurboProlog / Документация / TOM_1

Сравнение составных объектов.

Составные объекты должны сравниваться на равенство предикатами, оп-

ределенными пользователем, такими как are_equal, в программе CH0EX05.PRO

/* программа CH0EX05.PRO -сравнение составных объектов */

domains

d = pair(integer,integer); single(integer); none

predicates

are_equal(d,d)

clauses

are_equal(X,X).

Запустите программу 17 и проверьте следующие цели:

are_equal(single(4), pair(3,4)).

are_equal(pair(2,1), pair(2,1)).

are_equal(none, none).

А теперь проверьте цель :

are_equal(5, 4).

Как вы видите, такой запрос дает ошибку доменов. Чтобы избежать этой

проблемы, добавте новое определение к предикату are_equal :

are_equal(integer, integer)

И теперь снова проверьте цель

are_equal(5, 4).

Обзор

В этой главе были рассмотрены некоторые важные моменты:

1. Программа на Турбо Прологе может содержать множество типов объек-

тов данных: простые и составные, стандартные и определяемые пользо-

вателем. Простой объект данных - это один из следующих:

# переменная; например X, MyVariable, _another_variable, либо

единственное подчеркивание (_) для анонимной переменной.

# константа; char, число real или integer, атом symbol или string.

2. Составные объекты данных позволяют вам рассматривать несколько

частей информации как единое целое. Составной объект данных состоит

из имени (известном как функтор) и из одного или более аргументов.

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

3. Функтор Турбо Пролога - это не то же самое, что функция в других

языках программирования. Функтор не обозначает выполнения каких-либо

вычислений. Это просто имя, которое идентифицирует вид составных об-

ъектов данных и объединяет вместе свои аргументы.

4. Составной объект может рассматриваться, как один объект; можно

использовать функторы для различения объектов. Турбо Пролог позволя-

ет конструировать составные объекты с несколькими уровнями; аргумен-

ты составного объекта также могут быть составными объектами. Со сме-

шанными составными доменами можно использовать предикаты которые:

# получают аргумент более, чем одного из возможных типов (объявле-

ние функтора).

# получают различное число аргументов, каждый определенного типа

(объявление списков).

# получают разное количество аргументов, некоторые из которых мо-

гут быть более, чем одного из возможных типов.

5. Составной объект может быть унифицирован с простой переменной или

с составным объектом, который соответствует ему. Знак равенства, ко-

торый является унифицирующим предикатом используется для унификации

составных объектов; для сравнения составных объектов на равенство

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