Прилагательное algebraic
в algebraic data types
не относится к типу, используемому для решения проблемы алгебры, например.
x + y = 3 or 5 * y = 10
прилагательное algebraic
относится к способу типа построены/объявлены с использованием algebraic
операторы умножения (*
) и сложения (+
). В частности, алгебраические типы могут быть product types (*
), которые являются кортежами, например.
type Variable = string * int
и sum types, которые используют или символ (|
) вместо символа плюс (+
), которые различаются, например, ассоциации
type Term =
| Var of Variable
| Const of Constant
| App of Constant * Term list
После того, как один понимает, что и сдвигает их мышления статьи Википедии на algebraic data types должен иметь смысл, и это объясняет, почему вы не найти то, что вы ищете, например, статьи, которые объясняют, как решать проблемы алгебры с использованием алгебраических типов данных.
В сущности новых типов строятся из primitive data types, таких как int
, char
, string
и т.д., и алгебраических операторов product
и summation
, но что более важно, основаны алгебраические типы данных на type theory и будучи formal system принести со всем этим преимущества формальной системы.
Также следует отметить разницу в операторах для объявления типа кортежа и операторов, используемых для создания значения кортежа, например.
type Variable = string * int type
("x",0) value
Обратите внимание на *
оператор типа и ,
оператор для значения.
Также
type Term = type
| Var of Variable
| Const of Constant
| App of Constant * Term list
Var("x",0) value
Const("1") value
App("add",[Const("1"),Var("x",0)]) value
обратите внимание, что каждый possible option
должен иметь case identifier
при использовании значения.
Как вы узнали больше об ADT, вы столкнетесь с generalized algebraic data type, но, к сожалению, F # их не имеет, но были requested.
Mark Seemann предоставил ссылку на Power of mathematics - Reasoning about functional types от Tomas Petricek. Tomas то есть неработающая ссылка fairly readable introduction
но здесь это или что-то подобное: What the Heck are Algebraic Data Types? (for Programmers) или серия, которые я предпочитаю Крис Тейлор, который использует Haskell, но идеи не перевести на F #:
The Algebra of Algebraic Data Types, Part 1
The Algebra of Algebraic Data Types, Part 2
The Algebra of Algebraic Data Types, Part 3
Что значит? –
http://tomasp.net/blog/types-and-math.aspx –