Ocaml 错误:此表达式具有unit类型,但应为inst list类型的表达式

Ocaml 错误:此表达式具有unit类型,但应为inst list类型的表达式,ocaml,Ocaml,这是我们的代码,我们在编译时收到了上面的错误。错误来自!newList我们发送给递归函数的参数新列表被定义为参考,因此我们发送了!newList以传递其值。删除时我们收到一个错误,我们发送了一个ref for inst list而不是inst list(最终我们希望发送一个inst list!)。好的,我认为问题在于编译器认为createInstList返回单位。这是由于的优先级,我想 在我看来,它就像!末尾的newlist应该是整个createInstList函数的结果。但我怀疑它被视为内部匹

这是我们的代码,我们在编译时收到了上面的错误。错误来自!newList我们发送给递归函数的参数<代码>新列表被定义为参考,因此我们发送了
!newList
以传递其值。删除
我们收到一个错误,我们发送了一个ref for inst list而不是inst list(最终我们希望发送一个inst list!)。

好的,我认为问题在于编译器认为
createInstList
返回单位。这是由于
的优先级,我想

在我看来,它就像
!末尾的newlist
应该是整个
createInstList
函数的结果。但我怀疑它被视为内部
匹配的一部分

你可以试试这个:

|ScmOp(g,h) ->newList := (createInstList **!newList** a currentReg);

(很抱歉,您的代码格式完全不可读。我正在尝试改进它,但这需要大量的工作。如果您想要答案,您应该愿意做这项工作:-)更好,谢谢。嘿,首先,感谢您的快速响应!不幸的是,它没有解决这个问题,它导致了另一个错误,即无法识别ScmOp和start中定义的其他类型。已完成的任务;是为了完成循环。你说得对,孩子们!newList应该是整个createInstList的结果,但不幸的是它无法识别它。还有其他建议吗?如果没有足够的代码自己编译,很难提供帮助。但这似乎有很多支持代码。如果它导致另一个错误,这可能是一个改进。很容易会有不止一个问题。我不认为这是一个改进,因为它以前认识到了这些类型。这是错误:警告8:此模式匹配并非详尽无遗。下面是一个不匹配值的示例:ScmOp(,[])我认为您是对的,它不认识到!newList是整个递归调用的结果,但不幸的是,您建议的解决方案没有解决它。这对我来说似乎是一个改进:-)我怀疑您的匹配实际上是非穷举的。这不是关于识别类型,而是涉及所有案例。如果没有看到类型定义,我无法确定。但是你可以找到答案。谢谢!!!你说得对多了。。。我们确实有一个失踪的案子。再次感谢:)
let rec createInstList instList expr currentReg =
    let newList = ref instList in
    (match
           ...
        done);
    !newList