【发布时间】:2018-08-20 04:10:35
【问题描述】:
我正在尝试在 F# 中实现 BST。由于我是从 F# 开始我的旅程,所以我想寻求帮助。
我有一个简单的测试;
[<Fact>]
let ``Data is retained`` () =
let treeData = create [4]
treeData |> data |> should equal 4
treeData |> left |> should equal None
treeData |> right |> should equal None
使用可区分联合的树类型
type Tree<'T> =
| Leaf
| Node of value: 'T * left: Tree<'T> * right: Tree<'T>
将数据节点插入树中的递归函数
let rec insert newValue (targetTree: Tree<'T>) =
match targetTree with
| Leaf -> Node(newValue, Leaf, Leaf)
| Node (value, left, right) when newValue < value ->
let left' = insert newValue left
Node(value, left', right)
| Node (value, left, right) when newValue > value ->
let right' = insert newValue right
Node(value, left, right')
| _ -> targetTree
现在我在创建函数时遇到了问题。我有这个:
let create items =
List.fold insert Leaf items
以及由此产生的错误:
FS0001 类型不匹配。期待一个 ''a -> Tree -> 'a' 但给定一个 ''a -> Tree -> Tree' ''a' 和 'Tree' 类型不能统一。
【问题讨论】:
-
尝试在
insert函数中切换参数顺序。let rec insert targetTree newValue -
@Szer - 我不建议在
insert中切换参数顺序:它实际上是 right 顺序已经用于|>运算符,如所示我的回答。
标签: f# binary-search-tree