Tri*_*Gao 3 haskell fixpoint-combinators
我有点困惑.在Haskell中定义普通的递归函数没有问题.同时,还有fix通过固定点定义递归lambda 的标准函数.但是除了可读性较低之外,与直接调用自身的常规递归函数相比,定义的递归lambda具有应用程序开销.那么我在哪里需要递归的lambdas和fix?
你永远不需要它.不过有时它有点方便.
foo = do
foo1
x <- foo2
let loop = do
y <- bar x
if pred y then loop else return y
z <- loop
foo3 z
Run Code Online (Sandbox Code Playgroud)
VS
foo = do
foo1
x <- foo2
z <- fix $ \loop -> do
y <- bar x
if pred y then loop else return y
foo3 z
Run Code Online (Sandbox Code Playgroud)
我觉得第二点不那么麻烦.这是一个小问题,但我认为这很奇怪(也就是说,比这个例子更复杂,不太可能是已经存在于库中的东西)monadic循环看起来足够好,以至于使用这个成语对我来说是值得的.我也喜欢它避免将另一个名称绑定到do块的上下文中.