ISO-Prolog 提供sort/2
并keysort/2
依赖于术语顺序 (7.2),通常称为“标准术语顺序”。El
以不同顺序对列表进行排序的常用方法是将该列表的每个元素以某种方式映射到一个对XKey-El
列表,然后对该列表进行排序,最后将键投影掉。作为一个例子,考虑如何keysort/2
用sort/2
(参见实现的注释)来表达。
在许多情况下,这种方法比使用依赖于用户定义的顺序(如 SWI'spredsort(C_3, List, SortedList)
或 SICStus' )的通用实现特定排序谓词快得多samsort(O_2, List, SortedList)
。
我的问题归结为:
是否存在使用
predsort/3
resp 进行排序的情况。samsort/3
不能被一些映射、sort/2
-ing和投影代替吗?1
为了清楚起见,最好坚持有限的基础术语。因为,无限的基础词项不具有一个总的词典顺序,因为它需要作为有限情况的扩展;此外,在 ISO/IEC 13211-1:1995 的 7.2.1 中,变量与两个不同变量的实现相关的情况的比较将如何结果尚不清楚:
7.2.1 变量
如果
X
和Y
是不相同的变量,则
X
term_precedesY
应依赖于实现
,除非在创建排序列表(
7.1.6.5、8.10.3.1 j)期间,排序应保持不变。
因此尚不清楚是否predsort/3
仍符合创建排序列表的条件。很明显,在和期间 排序保持不变。sort/2
keysort/2
1 感谢@WillNess,这个投影至少还应该包括reverse/2
——或任何线性变换。这也意味着可以实现具有重复和唯一的结果(类似于实现的方式keysort/2
)。