摆脱以下小程序中的语法错误

时间:2011-03-02 06:15:57

标签: sml ml

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)

语法错误

stdIn:8.7-19.4 Error: syntax error: deleting  ELSE ID
stdIn:25.15-25.25 Error: syntax error: deleting  FUN ID
stdIn:25.32-25.36 Error: syntax error: deleting  IF ID

2 个答案:

答案 0 :(得分:3)

哦,SML错误消息的快乐。

我会回避你的语法错误(参见Gabe的回答)并提出一个不同的解决方案。

使用模式匹配解决这个问题更容易(和惯用):

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

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

答案 1 :(得分: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而不是冒号(:)。