Mercury 列表统一
Mercury List Unification
我正在努力学习 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 相同的部分实例化问题有关?
要编译一个模式正确的程序 Mercury 将重新排序联合中的目标以尝试制作一个模式正确的程序,但在此之前它还会将复杂的联合分解成多个部分.看起来 Mercury 正在努力重新排序这两个统一的部分以制作模式正确的程序,即使(从我看来)它应该是可能的。尝试重新排序前两个目标。
我正在努力学习 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 相同的部分实例化问题有关?
要编译一个模式正确的程序 Mercury 将重新排序联合中的目标以尝试制作一个模式正确的程序,但在此之前它还会将复杂的联合分解成多个部分.看起来 Mercury 正在努力重新排序这两个统一的部分以制作模式正确的程序,即使(从我看来)它应该是可能的。尝试重新排序前两个目标。