在以下代码部分中,我收到错误,我不知道为什么我会使用我的所有资源来研究它们。这是SMLNJ编码。
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:339.5-433.6错误:非构造函数应用于模式中的参数:DeallocComm hw4.sml:427.26-427.29错误:未绑定的变量或构造函数:var
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;
给出
hw4.sml:612.14错误:语法错误:插入EQUALOP
hw4.sml:615.8-615.11错误:语法错误:将VAL替换为END
对此有任何帮助将不胜感激。
答案 0 :(得分:1)
您可以将函数作为参数调用以传递给另一个函数,但是您执行的操作不正确。正确的语法是调用没有参数或perentheses的函数名,然后使用在函数体中作为参数传递的函数。
所以你希望你的函数声明是:
compComm (DeallocComm, env, ip, codes, contIP)=
然后在体内使用DeallocComm。就目前而言,您正在创建一个具有值但没有名称的环境变量 - DeallocComm(var,exp)在传递给函数之前评估。
答案 1 :(得分:0)
所以对于第一个,我认为它找不到构造函数DeallocComm
。 (从哪里宣布?)
对于第二个,它毫无意义。我不知道你在做什么。 store'
和store''
在loop'
函数内或函数外吗?如果是前者,那么为什么不在let
内?如果是后者,loop'
的主体在哪里;你怎么能在最后的表达式中使用store''
,这是在函数之外?此外,没有名为loop
的值。您似乎缺少许多fun
,let
和其他内容。