代数数据类型的"代数"表达式对于具有数学背景的人来说非常具有启发性.让我试着解释一下我的意思.
定义了基本类型
•+X1并使用简写X²的X•X和2X对X+X等等,我们就可以定义如链表代数表达式
data List a = Nil | Cons a (List a) ↔ L = 1 + X • L
和二叉树:
data Tree a = Nil | Branch a (Tree a) (Tree a) ↔ T = 1 + X • T²
现在,我作为数学家的第一直觉是坚持这些表达方式,并试图解决L和T.我可以通过重复替换来做到这一点,但似乎更容易滥用符号,并假装我可以随意重新排列.例如,对于链接列表:
L = 1 + X • L
(1 - X) • L = 1
L = 1 …
ocaml haskell functional-programming algebraic-data-types miranda