【发布时间】:2015-06-04 23:04:44
【问题描述】:
可以使用 Scott 编码来表示 ADT,方法是用元组替换乘积,用匹配器替换总和。例如:
data List a = Cons a (List a) | Nil
可以使用 Scott Encoding 编码为:
cons = (λ h t c n . c h t)
nil = (λ c n . n)
但我找不到如何使用 SE 对嵌套类型进行编码:
data Tree a = Node (List (Tree a)) | Leaf a
怎么做?
【问题讨论】:
-
我不确定,但我认为它的编码方式与您对
data Tree a = Node a | Leaf a的编码方式相同,即node = (λ x n l. n x)等。毕竟,列表编码并不关心递归引用-- 编码与data List a = Cons a a | Nil相同。不过,我对 SE 还不够熟悉,无法写出实际的答案。
标签: haskell functional-programming lambda-calculus algebraic-data-types scott-encoding