【发布时间】:2010-03-12 14:00:44
【问题描述】:
在我学习 F# 的过程中,我遇到了一个我无法解决的问题。我已经定义了一个自定义类型:
type BinTree =
| Node of int * BinTree * BinTree
| Empty
我做了一个函数,它接受一棵树,遍历它,并将它访问的元素添加到一个列表中,然后返回它:
let rec inOrder tree =
seq{
match tree with
| Node (data, left, right) ->
yield! inOrder left
yield data;
yield! inOrder right
| Empty -> ()
}
|> Seq.to_list;
现在我想创建一个函数,类似于这个,它接受一个树和一个函数,遍历它并将一个函数应用于每个节点,然后返回树:
mapInOrder : ('a -> 'b) -> 'a BinTree -> 'b BinTree
这看起来很简单,而且很可能就是这样!但我不确定如何归还树。我试过这个:
let rec mapInOrder f tree =
match tree with
| Node(data, left, right) ->
mapInOrder f left
Node(f(data), left, right)
mapInOrder f right
| Empty -> ()
但这会返回一个单位。我以前没有使用过自定义类型,所以我可能在那里遗漏了一些东西!
【问题讨论】: