【发布时间】:2018-12-11 00:45:15
【问题描述】:
这是 Haskell 中定点组合器的通常定义:
fix :: (a -> a) -> a
fix f = let x = f x in x
在https://wiki.haskell.org/Prime_numbers 上,它们定义了不同的定点组合器:
_Y :: (t -> t) -> t
_Y g = g (_Y g) -- multistage, non-sharing, g (g (g (g ...)))
-- g (let x = g x in x) -- two g stages, sharing
_Y是一个非共享定点组合器,这里安排一个递归的“伸缩” 多阶段素数生产(生产者塔)。
这到底是什么意思?在这种情况下,什么是“共享”与“非共享”? _Y 与 fix 有何不同?
【问题讨论】:
-
这里也讨论了这两种定义之间的区别:Why does GHC make fix so confounding?。
标签: haskell y-combinator letrec fixpoint-combinators