与 f# 战斗 - 战斗在树的领域 - 专门计算节点的数量。这是真正有趣的,因为我想最终在 F# 中编码的程序涉及多路树,不幸的是它的开始有点麻烦 - 我希望你能提供帮助!
99 f# 系列的第 61 题,要求计算二叉树的叶子。解决方案(如下所示)计算节点,但我的问题是不理解
双递归的工作原理向左循环(有趣的 lacc -> 向右循环..)
什么
cont (branchF x lacc racc)
是,我的印象是 cont 是“abc”函数,但这只需要两个参数......loop t id
id 的类型是 unit - 我不明白这是如何暗示的
基本上不理解这一点,或者它在树中流动的顺序(调试和单步执行没有帮助)如果有更简单的示例、预读建议等,请指导我。
非常感谢您的帮助,有问题的解决方案代码如下:
干杯
时间
type 'a Tree = Empty | Branch of 'a * 'a Tree * 'a Tree
let foldTree branchF emptyV t =
let rec loop t cont =
match t with
| Empty ->
cont emptyV
| Branch (x, left, right) ->
loop left (fun lacc ->
loop right (fun racc ->
cont (branchF x lacc racc)))
loop t id
let counLeaves tree =
foldTree (fun abc lc rc ->
if lc + rc = 0 then 1
else 1 + lc + rc) 0 tree
let Tree1 = Branch ('x', Branch ('x', Empty, Empty),Branch ('x', Empty, Branch ('x', Empty, Branch ('x', Empty, Empty))))
let result = counLeaves Tree1