|
Тип данных — фундаментальное понятие теории программирования. Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и, возможно, способ реализации хранения значений и выполнения операций. Любые данные, которыми оперируют программы, относятся к определённым типам.
Ещё в 1960-х гг. Р. Хиндли (Roger Hindley) исследовал типизацию в комбинаторной логике. Его проблемной областью была типизация в языках, основанных на теории лямбда-исчисления. Позднее, в конце 1960-х годов, тот же учёный исследовал полиморфные системы типов. Позже, в 1970-х годах, Робин Милнер предложил практическую реализацию расширенной системы полиморфной типизации для языка функционального программирования ML.
Тип (сорт) — относительно устойчивая и независимая совокупность элементов, которую можно выделить во всём рассматриваемом множестве (предметной области).
Полиморфный тип — представление набора типов как единственного типа.
Математически тип может быть определён двумя способами: Множеством всех значений, принадлежащим типу. Предикатной функцией, определяющей принадлежность объекта к данному тип.
Типы данных различаются начиная с нижних уровней системы. Так, например, даже в Ассемблере х86 различаются типы «целое число» и «вещественное число». Это объясняется тем, что для чисел рассматриваемых типов отводятся различные объёмы памяти, используются различные регистры микропроцессора, а для операций с ними применяются различные команды Ассемблера и различные ядра микропроцессора.
Концепция типа данных появилась в языках программирования высокого уровня как естественное отражение того факта, что обрабатываемые программой данные могут иметь различные множества допустимых значений, храниться в памяти компьютера различным образом, занимать различные объёмы памяти и обрабатываться с помощью различных команд процессора.
Предикаты revers1 и revers2 являются предикатами обращения списков и определяют одно и то же отношение различными способами. Схема отношения этого предиката имеет вид:
revers(<список>,<список>).
Предикат revers(X,Y) истинен, если список Y содержит все элементы списка Х, которые записаны в списке Y в обратном порядке. Перестановку элементов списка в обратном порядке можно произвести путем многократного выполнения процедуры append.
Процедура revers определяется двумя способами:
v простым обращением;
v обращением с накоплением.
Простое обращение выполняется процедурой revers1, которая использует процедуру append, описанную ранее, и состоит из двух предложений:
revers1([],[]). % Пр1
revers1([H|Xs],Zs):¾revers1(Xs,Ys), append(Ys,[H],Zs). %Пр2
Декларативное определение предиката revers1 формулируется следующим образом:
v обращенный пустой список есть пустой список;
v если список Х можно разделить на голову Н и хвост Xs, то Zs есть обращенный список, если Ys¾обращенный хвост списка X, Zs получен путем присоединения к Ys головы Н списка X.
ЧИТАТЬ ДАЛЕЕ
|