|ScmOp(g,h) ->newList := (createInstList **!newList** a currentReg);
这是我们的代码,我们在编译时收到了上述错误。该错误来自我们发送给递归函数的!newList 参数。 newList
被定义为引用,因此我们发送!newList
以传递其值。当删除!
时,我们收到了一个错误,我们发送了一个ref for inst列表而不是一个inst列表(最终我们想发送一个inst列表!)。
答案 0 :(得分:0)
好的,我认为问题是编译器认为createInstList
返回单位。这是由于;
的优先顺序,我认为。
在我看来,最后的!newlist
应该是整个createInstList
函数的结果。但我怀疑它被视为内在match
的一部分。
你可以试试这个:
let rec createInstList instList expr currentReg =
let newList = ref instList in
(match
...
done);
!newList