Я ответил на этот вопрос до [1]. Тем не менее, я кратко повторю, почему в этом ответе мы описываем типы данных как «алгебраические».
Для начала давайте разберемся, что означает слово «алгебра». Слово «алгебра» происходит от арабской фразы «аль-джабр», что означает «воссоединение сломанных частей» [2]. Тема разбиения проблем на более простые (декомпозиция) с последующим объединением решений этих проблем в окончательное решение (перекомпоновка) является центральной для нескольких областей, включая программирование [3].
Фраза «аль-джабр» была частью названия известной статьи по уравнениям [4 ] написан персидским математиком Мухаммадом аль-Хорезми, более известным на латыни как Алгоритми. Слово «алгоритм» произошло от его имени. Название статьи было «Китаб аль-Джабр вал-Мукабала», что переводится как «Правила реинтеграции и сокращения». Именно эта газета познакомила Запад с арабскими цифрами.
Алгебра - это реинтеграция (т. Е. Объединение частей объекта в единое целое). Следовательно, алгебраические типы данных связаны с объединением более простых типов данных в более сложные типы данных. Вы можете думать о типе данных как о наборе. Например, тип данных Int
- это набор всех целых чисел. Мы можем комбинировать более простые типы в более сложные типы, используя операцию декартового произведения и операцию дизъюнктного объединения.
Операция декартового произведения производит типы продуктов [5]. Например, если у нас есть два типа данных, Int
и Char
, то декартово произведение Int × Char
- это набор всех возможных пар целых чисел и символов. Значение типа Int × Char
- это пара (0, 'a')
.
Операция непересекающегося объединения производит типы суммы [6]. Например, если у нас есть два типа данных, Int
и Char
, то непересекающееся объединение Int + Char
- это набор всех целых чисел с тегами Int
или символов с тегами Char
. Значения типа Int + Char
- это пары (0, Int)
и ('a', Char)
.
Алгебраические типы данных позволяют определять типы данных алгебраически. Например, следующий тип данных Shape
представляет собой непересекающееся объединение типов Circle
и Rectangle
, которые являются декартовыми произведениями типа Double
:
data Shape = Circle { x :: Double, y :: Double, r :: Double }
| Rectangle { x1 :: Double, y1 :: Double, x2 :: Double, y2 :: Double }
По этой причине они называются «алгебраическими» типами данных.
person
Aadit M Shah
schedule
26.08.2015
ADT
означает абстрактный тип данных, а не алгебраический тип данных. - person Barmar   schedule 31.07.2014NewType = OldType1 | OldType2
, что соответствует установленному операторуUNION
. - person Barmar   schedule 31.07.2014NULL
(представляет пустой список) ИЛИ составным типом, содержащим элемент (head) и другой связанный список (rest i > списка) - person Barmar   schedule 31.07.2014