2017-12-06 7 views
1

私は最近smlを学んで、それをJavaと比較して使い方を混乱させました。だから私は、連続した値のペアをとり、それらを加えて新しいリストに合計を挿入するコードを作ってくれたと言われました。SML:どこに構文エラーがあります

元のリストの長さが奇数の場合、最初のn-1アイテムはペアごとに追加され、n-thアイテムは新しいリストの最後にそのままコピーされます。

だから私のコードは、これまでのところです:

fun sumpairs x = 

    if null x then [] 
    else (if (tl x =[]) then x 
    else hd x + hd(tl x) :: sumpairs(tl (tl x)); 

sumpairs([1,2,3]); (I want to test it on this to get something like [3,3]) 

が、私は構文エラーを取得しています。そして、smlが私のためにエラーを見つけられないので、私は問題が何かで失われているか、それがうまくいくかどうかは分からない。私はそれがうまくいくと信じています。

+1

あなたの括弧を数えます。私は閉じているよりもう一つの開き括弧を数えます。 – sepp2k

答えて

5

(if (tl x =[])にはカッコがありません。
(SMLのエラーメッセージはおそらく、私が遭遇した中で最も混乱している - 私は完全に役に立たない「EOFでの構文エラー」を、取得する。)

あなたが少なく使用する場合それは括弧に一致するように簡単です:

fun sumpairs x = 
    if null x then [] 
    else if tl x = [] then x 
    else hd x + hd (tl x) :: sumpairs (tl (tl x)) 

どの括弧が一致するかを示すエディタも役立ちます。
最新のプログラマーの編集者のほとんどは、あなたが魔法の設定を見つけたらそれを行うことができます。

私はあなたのパターンマッチングで慣れることをお勧めします - それは、通常、条件文のチェーンと比べてパターンとの論理に従う方がはるかに簡単です:

関連する問題