为什么 sort/4 会这样?
Why does sort/4 behave this way?
我需要按第三个元素对三个元素子列表的列表进行排序。我使用 sort/4 并引发了一个奇怪的错误。所以我读了documentation, had no clue what I did wrong and then tried it on a simple example。错误仍然存在。
以下是我在屏幕截图中执行的查询:
X = [ [1,2,3], [4,1,5], [3,5,2] ], sort( 2, @<, X, Y ).
X = [ [1,2,3], [4,1,5], [3,5,2] ], sort( 3, @<, X, Y ).
第一个成功,第二个引发“[1,2,3] 中不存在参数 ‘3’ ...”错误。我的 SWI-Prolog 是“(线程,64 位,版本 8.2.4)”。
P.S。不着急,我重新整理了列表(真的不用费心),效果很好。还是很好奇,我误会了什么?
编辑:
此外,按第二个元素对两个元素子列表进行排序不会引发错误。这是一个 screenshot 和查询:
X = [ [1,2], [4,1], [3,5] ], sort( 2, @<, X, Y ).
一个列表,它是一个复合项,只有两个参数(列表头和列表尾),而不是与列表 元素 混淆。以下 arg/3
查询应该有助于理解该错误:
?- arg(1, [1,2,3], Arg1).
Arg1 = 1.
?- arg(2, [1,2,3], Arg2).
Arg2 = [2, 3].
?- arg(3, [1,2,3], Arg3).
false.
我需要按第三个元素对三个元素子列表的列表进行排序。我使用 sort/4 并引发了一个奇怪的错误。所以我读了documentation, had no clue what I did wrong and then tried it on a simple example。错误仍然存在。
以下是我在屏幕截图中执行的查询:
X = [ [1,2,3], [4,1,5], [3,5,2] ], sort( 2, @<, X, Y ).
X = [ [1,2,3], [4,1,5], [3,5,2] ], sort( 3, @<, X, Y ).
第一个成功,第二个引发“[1,2,3] 中不存在参数 ‘3’ ...”错误。我的 SWI-Prolog 是“(线程,64 位,版本 8.2.4)”。
P.S。不着急,我重新整理了列表(真的不用费心),效果很好。还是很好奇,我误会了什么?
编辑:
此外,按第二个元素对两个元素子列表进行排序不会引发错误。这是一个 screenshot 和查询:
X = [ [1,2], [4,1], [3,5] ], sort( 2, @<, X, Y ).
一个列表,它是一个复合项,只有两个参数(列表头和列表尾),而不是与列表 元素 混淆。以下 arg/3
查询应该有助于理解该错误:
?- arg(1, [1,2,3], Arg1).
Arg1 = 1.
?- arg(2, [1,2,3], Arg2).
Arg2 = [2, 3].
?- arg(3, [1,2,3], Arg3).
false.