0
datatype inttree = Empty | Node of int * inttree * inttree

fun insert(t,i)= if t=Empty then Node(i,Empty,Empty)
 else if t=Node(j,l,r):
        if (i=j) 
                 then t 
                 else if (i < j) 
          then Node(j,insert l i,r)
           else Node(j,l,insert r i)

语法错误是

标准输入:8.7-19.4 错误:语法错误:删除 ELSE ID
stdIn:25.15-25.25 错误:语法错误:删除 FUN ID
stdIn:25.32-25.36 错误:语法错误:删除 IF ID
4

2 回答 2

3

哦,SML 错误消息的乐趣。

我会回避您的语法错误(请参阅 Gabe 的回答)并提出不同的解决方案。

这个问题通过模式匹配更容易(并且惯用地)解决:

fun insert (Empty, i) = Node (i, Empty, Empty)
  | insert (Node (j, l, r), i) = <your code here>

(抱歉,如果语法关闭,我的 SML 有点生疏了。)
我留了一个案例供您填写,以免完全破坏您的乐趣。

于 2011-03-03T18:32:48.217 回答
1

格式正确,这是您的功能:

fun insert(t,i) =
    if t = Empty then
        Node(i,Empty,Empty)
    else if t = Node(j,l,r):
        if (i=j) then
            t 
        else if (i < j) then
            Node(j,insert l i,r)
        else
            Node(j,l,insert r i)

你看到有什么问题吗?if t = Node(j,l,r):没有else与之相匹配的。此外,它应该有一个then而不是冒号 ( :)。

于 2011-03-02T06:25:50.220 回答