2

我正在尝试学习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), [] ) )吗?

这是否与此处相同的部分实例化问题有关?

4

1 回答 1

1

为了编译一个模式正确的程序,Mercury 将在一个合相中重新排序目标,以尝试制作一个模式正确的程序,但在它这样做之前,它还会将复杂的 unfications 分解为多个部分。看起来 Mercury 正在努力重新排序这两个统一的部分以制作模式正确的程序,即使(从我看来)它应该是可能的。尝试重新排序前两个目标。

于 2018-09-27T01:46:38.487 回答