Das Adjektiv algebraic
in algebraic data types
bezieht sich nicht auf einen Typ, der verwendet wird, um ein Algebraproblem zu lösen, z.
x + y = 3 or 5 * y = 10
das Adjektiv algebraic
auf die Art und Weise bezieht sich Typen aufgebaut sind/deklariert die algebraic
Betreiber der Multiplikation mit (*
) und zusätzlich (+
). Insbesondere können algebraische Typen product types (*
) sein, die Tupel, z.B.
type Variable = string * int
und sum types, die das oder Zeichen (|
) anstelle des Pluszeichens (+
), die Vereinigungen diskriminiert werden, z.B.
type Term =
| Var of Variable
| Const of Constant
| App of Constant * Term list
Sobald man das versteht und verschiebt ihre den Wikipedia-Artikel über algebraic data types denken sollte Sinn machen und dies wird erklären, warum Sie nicht finden, was Sie suchen, zum Beispiel Artikel, die erklären, wie Algebraprobleme mit algebraischen Datentypen gelöst werden können.
Im Wesentlichen neue Typen aufgebaut sind aus primitive data types wie int
, char
, string
usw. und die algebraische Betreiber von product
und summation
aber noch wichtiger ist, sind algebraische Datentypen basierend auf type theory und formal system mit sich bringen wird alle die Vorteile eines formellen Systems.
Bemerkenswert ist auch der Unterschied in den Operatoren zum Deklarieren des Tupeltyps und der Operatoren, die zum Erzeugen eines Tupelwerts, z.
type Variable = string * int type
("x",0) value
Notiz Der *
Operator für den Typ und die ,
Operator für den Wert.
Auch
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
Hinweis, dass jeder possible option
eine case identifier
, wenn sie mit einem Wert verwendet haben muss.
Wenn Sie mehr über ADTs erfahren, werden Sie auf generalized algebraic data type stoßen, aber leider hat F # sie nicht, aber war requested.
Mark Seemann lieferte einen Link zu Power of mathematics - Reasoning about functional types von Tomas Petricek. Tomas hat dann einen toten Link fairly readable introduction
aber hier ist es oder etwas ähnliches: What the Heck are Algebraic Data Types? (for Programmers) oder die Serie, die ich von Chris Taylor bevorzugen, die Haskell verwendet, aber die Ideen zu F # übersetzen Sie:
The Algebra of Algebraic Data Types, Part 1
The Algebra of Algebraic Data Types, Part 2
The Algebra of Algebraic Data Types, Part 3
was meinst du? –
http://tomasp.net/blog/types-and-math.aspx –