我正在尝试学习Mercury。我一直在弄乱列表,但是我无法获得一个看似简单的统一工作方式。这是我简化的示例案例:
main(!IO) :-
[X,Y] = List,
List = [1,2], % Error
io.write(List, !IO),
io.nl(!IO).
在List = [1,2]
行上,出现以下错误(格式化并稍作编辑):
main.m:024: In clause for `main(di, uo)':
mode error in unification of `List' and `list.[V_11 | V_21]'.
Variable `List' has instantiatedness
`unique(list.'[|]'(free, unique(list.'[|]'(free, unique((list.[]))))))',
term `list.[V_11 | V_21]' has instantiatedness
`list.'[|]'( unique(1), free )'.
那似乎不太对劲;特别是[1,2]
的实例化。这是字面意思;它的实例化不应该像list.'[|]'( unique(1), list.'[|]'( unique(2), [] ) )
一样吗?
这是否与here相同的部分实例化问题相关?
答案 0 :(得分:1)
要编译模式正确的程序,Mercury将重新组合目标的顺序以尝试制作模式正确的程序,但是在此之前,它还会将复杂的功能分解为多个部分。尽管从我看来,Mercury似乎正在努力对这两个统一的部分进行重新排序以制作模式正确的程序。尝试重新排序前两个目标。