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

Sep 27, 2009 23:42

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

Роман Душкин

Аннотация Статья рассматривает важную идиому программирования - алгебраический тип данных (АТД). Приводится теоретическая база, которая лежит в основе практического применения АТД в различных языках программирования. Прикладные аспекты рассматриваются на языке ( Read more... )

Leave a comment

thedeemon October 16 2009, 11:29:15 UTC
Извиняюсь, если вопрос прозвучит сумбурно.

Не очень понятно, почему говорится, что АТД - размеченное объединение именно декартовых произведений множеств. Декартово произведение - лишь частный случай, там же может быть и что-то иное, например другая сумма.

У нас есть базовые элементы-типы и две операции - умножение и сложение, которые дают нам строить более сложные типы. Да, слагаемым может быть произведение, но может и не быть. Зачем говорить, что любая сумма - именно сумма произведений?

Reply

nponeccop October 16 2009, 19:58:22 UTC
Не в священную, а просто в битву. Священные войны возникают, если обсуждаемая проблема субъективна. А какой может быть субъективизм при обсуждении GRS?

Reply

nponeccop October 16 2009, 18:09:46 UTC
Так и декартово произведение "каррировано", разве нет?

(a, b, c) - это (,) a ((,) b c)

Reply

(The comment has been removed)

nponeccop October 16 2009, 20:20:05 UTC
я же написал "каррировано", в кавычках. "Каррированность" означает, например, что

snd (1, 2, 3) вернет (2, 3) или 3 в зависимости от ассоциативности (,)

Математический sum type - "каррирован", а Хаскель делает отличия между (1, 2, 3) и (,) 1 $ (,) 2 3

Reply

nponeccop October 16 2009, 15:48:38 UTC
Надо смотреть на формализацию Хоара. Возможно, он определил произведение как prod(1,n, t(m)), где 0 <= m <= n

Reply

(The comment has been removed)

nponeccop October 16 2009, 15:46:07 UTC
Это не так. Кортеж и декартово произведение - разные понятия.

Reply

(The comment has been removed)

nponeccop October 16 2009, 17:29:33 UTC
Разумеется.

Reply

(The comment has been removed)

antilamer October 16 2009, 12:47:12 UTC
Мне кажется все же, что "раскрытие скобок" тут неуместно: у него нет аналога в хаскелле или окамле, и собственно нет самой эквивалентности: даже тип (A+B)+C - не то же самое, что A+(B+C), хоть и изоморфен ему.

Reply

(The comment has been removed)

nponeccop October 16 2009, 15:44:42 UTC
+1. Декларация типов в Хаскеле - это именно сумма размеченных произведений типов, и никак иначе.

Reply

thedeemon October 16 2009, 16:08:21 UTC
И именно в Хаскеле. :)
Я просто против натягивания его логики на все остальное.

Reply

(The comment has been removed)


Leave a comment

Up