Курсовая работа: Совместимость и преобразование типов данных

assert(declared(A,B,type(rec([F|LF])))},

[end].

type(B,tid(A,B)) -->

[`^,id(I)],

{(type_id2(I,B,B1,type(_));

assert(declared(I,B,type(referred))),

B1=B),

recorda(alias,_,A),

assert(declared(A,B,type(ref(I,B1)))}.

Предикат consist в этом случае определяется следующим образом:

consist(T1,T2):T1=int,T2=real ; % приводимость

equiv(T1,T2) ; % эквивалентность

error("Несовместимые типы").

equiv(T,T).

equiv(tid(I,B),tid(I1,B1)):declared(I,B,type(tid(I1,B1)));

declared(I1,B1,type(tid(I,B))).

Именная эквивалентность сравнительно просто реализуется. Но это – отношение (рефлексивное и симметричное) не транзитивно, и поэтому не является эквивалентностью ни в математическом, ни в привычном, обыденном смысле. Понятие псевдонима типа обычно не даётся программистам, Поэтому начинающие программисты на Паскале часто делают ошибки, вроде указанных в примере. Мотивацией для введения именной эквивалентности в 1970-е годы послужило желание избежать ошибок программирования, вроде присваивания "яблокам" "крабов", когда и те, и другие описаны как целые. С развитием объектно-ориентированного программирования подобные ухищрения стали излишними, а именная эквивалентность осталась в некоторых языках как анахронизм.

Структурно-именная эквивалентность

Этот тип эквивалентности самый простой: эквивалентными считаются типы, имеющие одинаковый базовый тип. Предикат consist в этом случае определяется следующим образом:

consist(T1,T2):base_type(T1,BT1),base_type(T2,BT2),

(BT1=int,BT2=real ; % приводимость

BT1=BT2 ; % эквивалентность

error("Несовместимые типы")).

При этом нет необходимости вводить псевдонимы типа, как в случае именной эквивалентности. Вместо предиката acc_type при анализе доступа можно применять предикат base_type.

Отношение структурно-именной эквивалентности рефлексивно, симметрично и транзитивно. По вложению оно лежит строго между структурной и именной эквивалентностями. Им легко пользоваться на практике.

Примеры

1.

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

Program Code_pf_Char;

К-во Просмотров: 305
Бесплатно скачать Курсовая работа: Совместимость и преобразование типов данных