我正在尝试在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]
答案 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