Error: This expression has type unit but an expression was expected of type inst list
Error: This expression has type unit but an expression was expected of type inst list
|ScmOp(g,h) ->newList := (createInstList **!newList** a currentReg);
这是我们的代码,我们在编译时收到上述错误。错误来自我们发送给递归函数的 !newList 参数。 newList
被定义为引用,因此我们发送 !newList
以传递其值。删除 !
时,我们收到一个错误,我们发送了 inst 列表的 ref 而不是 inst 列表(最终我们想发送一个 inst 列表!)。
OK,我认为问题出在编译器认为createInstList
returns单元。我认为这是由于 ;
的优先级。
在我看来,末尾的 !newlist
应该是整个 createInstList
函数的结果。但我怀疑它被视为内部 match
.
的一部分
你可以试试这个:
let rec createInstList instList expr currentReg =
let newList = ref instList in
(match
...
done);
!newList
|ScmOp(g,h) ->newList := (createInstList **!newList** a currentReg);
这是我们的代码,我们在编译时收到上述错误。错误来自我们发送给递归函数的 !newList 参数。 newList
被定义为引用,因此我们发送 !newList
以传递其值。删除 !
时,我们收到一个错误,我们发送了 inst 列表的 ref 而不是 inst 列表(最终我们想发送一个 inst 列表!)。
OK,我认为问题出在编译器认为createInstList
returns单元。我认为这是由于 ;
的优先级。
在我看来,末尾的 !newlist
应该是整个 createInstList
函数的结果。但我怀疑它被视为内部 match
.
你可以试试这个:
let rec createInstList instList expr currentReg =
let newList = ref instList in
(match
...
done);
!newList