Алгебраические типы данных и их использование в программировании
Роман Душкин
Аннотация Статья рассматривает важную идиому программирования - алгебраический тип данных (АТД). Приводится теоретическая база, которая лежит в основе практического применения АТД в различных языках программирования. Прикладные аспекты рассматриваются на языке
(
Read more... )
Не очень понятно, почему говорится, что АТД - размеченное объединение именно декартовых произведений множеств. Декартово произведение - лишь частный случай, там же может быть и что-то иное, например другая сумма.
У нас есть базовые элементы-типы и две операции - умножение и сложение, которые дают нам строить более сложные типы. Да, слагаемым может быть произведение, но может и не быть. Зачем говорить, что любая сумма - именно сумма произведений?
Reply
(The comment has been removed)
Для определения АТД достаточно, что это сумма слагаемых, где слагаемые - типы. Уточнять, что это произведения, в которых число множителей может быть 1 или 0 несколько излишне, имхо.
Мы же не говорим, что в декартовом произведении типов множители - это суммы, где число слагаемых может быть 1. :)
Reply
(The comment has been removed)
Reply
Нет.
Каждый конструктор алгебраического типа имеет вид Consi t1 t2 ... - т.е. декартово произведение типов t1, t2,... , а то, что это за типы - никакого значения не имеет.
Reply
Но в паттерн матчинге мы такую штуку запишем как Cons x и если x - произведение, то оно будет в скобках как тупл, и все это вместе можно заменить одним _. Если бы в определении типа был набор t1 t2 и т.д, пришлось бы писать много _, когда значение не важно.
Короче, имхо, в статье частный случай хаскелла обобщили до определения, что некрасиво.
Reply
Fork a (Tree a) (Tree a) <-> Fork (a, Tree a, Tree a)
Cons of t - это декартово произведение единственного типа t.
В общем, тут нет обобщения, тут одно из нескольких эквивалентных определений.
Reply
Когда рассказываем про А -> B, мы же не вводим в определение тот факт, что А - это декартово произведение, в котором может быть один множитель или ни одного - (). Зачем тогда делать такое в определении суммы? Просто из-за синтаксиса Хаскелла?
Reply
Reply
Reply
(The comment has been removed)
Reply
(The comment has been removed)
Reply
(The comment has been removed)
Leave a comment