LINUX.ORG.RU

История изменений

Исправление den73, (текущая версия) :

Спасибо. Т.е. по сути, тегированные юнионы + рассуждения о типах на них В этом смысле да, в лиспе нет рассуждений о типах. Хотя сами помеченные юнионы делаются элементарно:

(defstruct Апельсин-или-яблоко-с-меткой
  (Метка 'Апельсин :type (member Апельсин Яблоко))
  (Значение (Вырастить-апельсин) :type (or Апельсин Яблоко)))
Но компилятор не будет проверять, что тег соответствует значению. Видимо, в этом и разница. Но я, если оставить в стороне пропаганду, положа руку на сердце не сказал бы, что в Хаскеле «есть» эти типы а в Си «нет». Нужно различать возможность записать этот тип и операции, которые можно делать с этим типом. Паттерн матчинг и вывод типов - это своего рода операции, или, если угодно, метаоперации.

Исходная версия den73, :

Спасибо. Т.е. по сути, тегированные юнионы + рассуждения о типах на них В этом смысле да, в лиспе нет рассуждений о типах. Хотя сами помеченные юнионы делаются элементарно:

(defstruct my-union
  (type-tag 'Апельсин :type (member Апельсин Яблоко))
  (value (Вырастить-апельсин) :type (or Апельсин Яблоко)))
Но компилятор не будет проверять, что тег соответствует значению. Видимо, в этом и разница. Но я, если оставить в стороне пропаганду, положа руку на сердце не сказал бы, что в Хаскеле «есть» эти типы а в Си «нет». Нужно различать возможность записать этот тип и операции, которые можно делать с этим типом. Паттерн матчинг и вывод типов - это своего рода операции, или, если угодно, метаоперации.