相关疑难解决方法(0)

折叠,功能构成,单子和懒惰,哦,我的?

我很困惑.我可以这样写:

import Control.Monad

main = print $ head $ (foldr (.) id [f, g]) [3]
  where f = (1:)
        g = undefined
Run Code Online (Sandbox Code Playgroud)

而输出是1.这是有道理的,因为它减少到:

main = print $ head $ ((1:) . undefined . id) [3]
main = print $ head $ (1:) ((undefined . id) [3])
main = print $ head $ 1 : ((undefined . id) [3])
main = print $ 1
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用模糊相似的monadic技术,它不会起作用:

import Control.Monad

main = print $ (foldr (<=<) return [f, g]) 3
  where f …
Run Code Online (Sandbox Code Playgroud)

monads haskell fold function-composition

22
推荐指数
2
解决办法
891
查看次数

这个基于foldl的函数如何工作:"myreverse = foldl(flip(:))[]"?

我正在学习haskell,我试图编写自己的反向函数而不使用递归.

解决方案是这个功能:

myreverse = foldl (flip (:)) []
Run Code Online (Sandbox Code Playgroud)

我试图了解评估过程中发生的事情,比如说:

myreverse [1..5]
Run Code Online (Sandbox Code Playgroud)

我无法理解这里有什么翻盖.有人可以通过逐步解释来记下这里发生的事情吗?

recursion haskell foldleft

4
推荐指数
1
解决办法
253
查看次数