【发布时间】:2016-08-03 03:04:05
【问题描述】:
data T b = E | N b (T b) (T b)
f :: T b -> Reader Int (T Int)
f (N i l r) = ask >>= \x -> local ((-)4) (f l) >>= \l' -> local ((-)1) (f r) >>= \r' -> return (N x l' r')
f E = return E
我无法理解这段代码的工作原理。特别是,ask 如何知道环境在哪里(在我们的例子中只是Int)?
更准确地说:我是一名命令式程序员,使用这种语言很容易。可以在任何对象上调用方法,例如:obj.f(),或者当我们希望函数使用外部数据时,我们必须通过参数传递数据。
【问题讨论】:
-
Reader Monad Purpose的可能重复
-
这是我本周看到的关于二叉树和阅读器单子的第二个或第三个问题 (eg)。是来自 MOOC 课程作业还是什么?
标签: haskell