为什么 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.