我很困惑.我可以这样写:
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) 我正在学习haskell,我试图编写自己的反向函数而不使用递归.
解决方案是这个功能:
myreverse = foldl (flip (:)) []
Run Code Online (Sandbox Code Playgroud)
我试图了解评估过程中发生的事情,比如说:
myreverse [1..5]
Run Code Online (Sandbox Code Playgroud)
我无法理解这里有什么翻盖.有人可以通过逐步解释来记下这里发生的事情吗?