【发布时间】:2021-11-06 04:10:13
【问题描述】:
假设foldTree、Tree 和函数f 的这些定义:
foldTree : (a -> [b] -> b) -> Tree a -> b
foldTree f = go
where
go (Node x ts) = f x (map go ts)
tree :: Tree String
tree = Node
"Alpha"
[ Node "Beta" [Node "Epsilon" [], Node "Zeta" [], Node "Eta" []]
, Node "Gamma" [Node "Theta" []]
, Node "Delta" [Node "Iota" [], Node "Kappa" [], Node "Lambda" []]
]
f x xs = [x] <> (map ('\t' :) (concat xs))
我会尝试评估foldTree f tree:
foldTree f tree
= go (Node "Alpha" [ Node "Beta" [Node "Epsilon" [], Node "Zeta" [], Node "Eta" []], Node "Gamma" [Node "Theta" []], Node "Delta" [Node "Iota" [], Node "Kappa" [], Node "Lambda" []]]
= f "Alpha" (map go [...])
...
此时,我的问题是:等式推理如何与闭包一起工作? go的定义有f;但是,这肯定不在其参数之间。是否有一些技巧可以插入该定义?
【问题讨论】:
标签: haskell functional-programming scope closures evaluation