2010-11-19 16 views
0

コードの次のセクションでは、すべてのリソースを使用してそれらを調べているにもかかわらず、なぜ私がそれらを取得しているのかわからないというエラーが表示されます。これはSMLNJコーディングです。 339.5から433.6エラー:非コンストラクタはパターンで引数に適用される:DeallocComm hw4.sml:427.26から427.29エラー:バインドされていない変数またはコンストラクタ:VARSML構文エラーヘルプ

compComm (DeallocComm(var, exp), env, ip, codes, contIP)= 
let val loc = lookupEnv var env; 
    val codes1 = emitByte(LDC, ip, codes); 
    val codes2 = emitByte(Arg loc, ip + 1, codes1); 
    val (ip', codes3) = compExp(exp, env, ip+2, codes2); 
    val codes4 = emitByte(ADEALLOC, ip', codes3); 
    in(ip'+1, codes4, nil, contIP) 
    end; 

hw4.smlを与えます

hw4.sml:430.31から430.34エラー:バインドされていない変数またはコンストラクタ:EXP

ADEALLOC => let val (n, stack') = popStack stack 
val (loc, stack'') = popStack stack'; 
fun loop'(n, loc, store) = 
    val store' = updateTable (loc, defaultIntValue, store); 
    in loop'(n-1, loc+1, store) = 
    val store'' = loop'(n, loc, store) end; 
in loop(ip+1, store'', stack'') end; 
.14エラー:構文エラー:615.8から615.11エラー:構文エラー:END

でVALを置き換えるこれらの任意のヘルプをいただければ幸いEQUALOP

hw4.smlを挿入

hw4.smlを与えます。

答えて

0

最初の1つでは、私はそれがコンストラクタDeallocCommを見つけることができないと思います。 (どこから宣言されていますか?)

2番目のものは意味がありません。あなたが何をしているのか分かりません。 loop'機能内または外にstore'store''がありますか?前者の場合は、なぜそれがletの内部ではありませんか?後者の場合、体はどこですかloop';最後に式の中でstore''を使うことができますか?それは関数の外にありますか?また、loopという値もありません。 fun,letなどがたくさんあるようです。

1

関数を引数として呼び出して別の関数に渡すことはできますが、間違っていることがあります。正しい構文は、引数または引数なしで関数名を呼び出し、渡された関数の本体内で引数として渡された関数を使用することです。

compComm (DeallocComm, env, ip, codes, contIP)= 

をして、身体にDeallocCommを使用します。

つまり、あなたの関数の宣言になりたいです。 DeallocComm(var、exp)は、が関数に渡される前にを評価します。

+0

@Crowbreak、ユーザーに詳細なアドバイスを与えるようにしてください。 –

+0

よろしくお願いいたします。ありがとうございました! – Crowbeak