1

当我对 [(101,a),(42,b),(85,b)] 进行排序时,Prologsort([(101,a),(42,b),(85,b)],X).是 getX = [ (42, b), (85, b), (101, a)].但是怎么来的呢?Prolog 是否识别元组并将它们排序在第一个元素然后在第二个元素上?

4

2 回答 2

3

您真的应该简单地查看您正在使用的 Prolog 的确切文档。例如,在 SWI-Prolog 中,排序是按“标准顺序”进行的。对于复合术语(如您使用的那样),它首先是 arity,然后是名称,然后是递归参数。所以在你的情况下,是的,它首先在第一个参数上排序,然后在第二个参数上排序。

顺便说一句,ISOsort应该删除重复项,而不是让您对此感到惊讶。

严格来说,Prolog 中没有“元组”。你所拥有的是,具有 arity 2(或,,/2)的函子。看这个:

2 ?- write_canonical((42, b)).
','(42,b)
true.
于 2013-06-18T14:41:49.843 回答
-1

你的假设似乎是合理的。我们可以查看一些文档,我个人喜欢ciao 的文档

请参见第 235 页和第 115 页。请注意,您也可以按键排序。

您应该知道,有些人认为使用这种谓词(非声明性)是一种不好的做法。这个谓词基本上有两个词,一个必须有根,另一个不能,所以实际上这是一个函数而不是一个逻辑谓词。那些担心逻辑编程的“纯度”的人可能会找到一个不使用它的解决方法。

于 2013-06-18T14:19:39.417 回答