2011-03-02 41 views
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) 

語法錯誤擺脫synatax錯誤的下面的小程序

 
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 
+1

你看到什麼語法錯誤? – 2011-03-02 06:19:25

+0

這不是你的完整程序。你必須告訴我們你程序中的那些錯誤*。 – Gabe 2011-03-02 06:24:17

+0

我不明白,爲什麼這個程序不完整 – abhi 2011-03-02 06:26:21

回答

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而不是冒號(:)。

+0

我是一個初學者sml.據我所知,C++允許,如果沒有else.pls幫我改正這個 – abhi 2011-03-02 06:29:35

+0

SML不是C++。在SML中,條件是*表達式*,而不是語句 - 就像C++的*三元操作符*('?:')一樣,也像三元運算符一樣,您不能排除'else'分支。 – molbdnilo 2011-03-03 17:52:01

2

哦,SML錯誤信息的喜悅。

我會迴避你的語法錯誤(請參閱Gabe的回答)並提出一個不同的解決方案。

這個問題更容易(地道)解決了模式匹配

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

(道歉,如果語法是關閉的,我的SML是有點生疏)
我離開了一個案例因爲你要填寫,以免完全破壞你的樂趣。