SML中的二进制搜索树

时间:2015-02-08 01:20:21

标签: functional-programming binary-search-tree sml smlnj ml

我正在尝试在SML中实现二进制搜索树。我有一个插入函数,我正在尝试实现另一个获取列表并在列表中的每个元素上调用insert函数的函数。这是我到目前为止所做的,

fun insertB (l) = insert (hd(l),  Node(insertB(tl (l)), Nil, Nil))

但我没有基本情况,所以这就是一个问题。我的输入函数将int和Node作为参数。我目前得到的错误是error right-hand-side of clause doesn't agree with function result type [tycon mismatch]

1 个答案:

答案 0 :(得分:1)

insertB函数的基本情况是空列表[]。什么二元搜索树会对应?当然,这是一个空的,在你的情况下似乎被命名为Nil

fun insertB [] = Nil

这是递归的基本情况。你现在需要递归的情况,这与你所做的非常相似,除了你不尝试构建BST,而是让递归调用构建它:

  | insertB (head :: tail) = insert (head, insertB tail)

因此整个功能是:

fun insertB []             = Nil
  | insertB (head :: tail) = insert (head, insertB tail)

或者,您可以使用foldl

fun insertB xs = foldl insert Nil xs