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

Ссылочные типы

При проведении анализа потока параметров осуществляется проверка то-

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

значения в теле предложения. Если переменная не получает значения в пред-

ложении, то она рассматривается как ссылочная переменная. Ниже приведен

пример подобной ситуации:

predicates

p(integer)

clauses

p(X):-!.

goal

p(V), V=99, write(V).

В целевом утверждении (goal) предикат р вызывается с выходным пара-

метром V, однако в предложении для р аргумент Х является свободным. Если

при анализе потока параметров обнаруживается подобная ситуация, то систе-

ма проверяет тип данной переменной. Если тип объявлен как ссылочный тип

(reference), то нет проблем; в противном случае система выдаст предупреж-

дающее сообщение.

Когда переменная в предложении не связана, то из предложения не мо-

жет быть получено ее значение. Вместо того система выдаст ссылочный ука-

затель на то место, куда позднее будет занесено фактическое значение пе-

ременной. При этом требуется, чтобы все переменные данного типа рассмат-

ривались одинаково; вместо просто передачи значений параметров, относя-

щихся к этому типу, в качестве аргументов для параметров ссылочного типа

будут передаваться указатели.

Если сложный тип объявляется как ссылочный, то все его подтипы также

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

возможность содержать свободные переменные. Если вы в качестве ссылочного

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

подтипы также относятся к ссылочному типу.