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)

構文エラーは

stdIn: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は少し錆びています。)
あなたの楽しみを完全に損なうことがないように、私はあなたが記入するために1つのケースを残しました。

于 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 に答える