0

次のコードを何時間も修正した後、次のコンパイル エラー メッセージが表示され、何を試しても修正できません。

エラー: 構文エラー: END RPAREN FUN を削除中

コードは次のとおりです。

 fun we  (array1 , k, n, fif1) = if Queue.isEmpty fif1 then (array1, ~1 , n ,
   fif1 )
    else (  
     let
        val b = Queue.head(fif1)
        val y = Queue.dequeue(fif1)
        val z = #1 b
        in 
            if ( (Array.sub (array1 , z))  = (What) ) then (array1 , #2 y ,    n    , fif1 ) else 
            (
            if (Array.sub (array1 ,(z+n) ) <> ( Block) ) then (
            ( Queue.enqueue ( fif1 , (z, (#2 b) ))) ; Array.update (array1 , ((z)+n) , Block)) else (); 
            if ( (Array.sub (array1 , (z+1)) ) <> ( Block) ) then (
            Queue.enqueue ( fif1 ,((z+1), ((#2b) + 1)));  Array.update (array1 , (z+1) , Block)) else () ; 
            if (Array.sub (array1 , (z-1 ) ) <> ( Block) ) then (
            Queue.enqueue ( fif1 , (((z-1), ((#2 b)+1) ) )) ; Array.update (array1 , (z-1) , Block)) else () ; 
            if ( (Array.sub (array1 , (z-n ) )) <> (Block) ) then 
            ( Queue.enqueue ( fif1 , ((z-n), ((#2 b)+2 )) );  Array.update (array1 , (z-n) , Block) ) else () ;
            we (array1 , k, n , fif1));
        end ) 

fun tb filename =
let
 val (n, array1) = parse filename
 val c = findt (T, array1, 0) 
 val fif1 = Queue.mkQueue ()
in
  #2 we (array1, 0, n, Queue.enqueue (fif1 , (c,0) ) )
end

エラーメッセージはコードのこの部分に関するものです

we (array1 , k, n , fif1));
            end ) 

    fun tb filename =

事前に感謝します。

4

1 に答える 1

1
            we (array1 , k, n , fif1));
        end )

SMLでは、ステートメントターミネータではなく、;ステートメントセパレータです。これが意味することは、複数のステートメントを含むブロックがある場合、ステートメントの間に s を入れますが、ブロック内の最後のステートメントの後に a を入れないということです。言い換えれば、afterがあってはなりません。;;;we (array1 , k, n , fif1))

#2 we (array1, 0, n, Queue.enqueue (fif1 , (c,0) ) )

ここでは、 functionと tuple#2の 2 つの引数を使用して呼び出しています。あなたが意図したことは、タプルを引数として呼び出してから、結果を引数として呼び出すことです。それはそうでしょう。we(array1,...)we#2#2 (we (array1, 0, n, Queue.enqueue (fif1 , (c,0) ) ) )

于 2013-06-13T17:52:00.790 に答える