- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
ISO-Prolog 提供 sort/2
和 keysort/2
它依赖于术语顺序(7.2),通常称为“标准术语顺序”。
以不同顺序对列表进行排序的常用方法是映射每个元素 El
以某种方式将该列表中的一对列表 XKey-El
然后对该列表进行排序,最后将 key 投影出去。作为一个例子,考虑如何 keysort/2
可以用 sort/2
表示(See the note for an implementation)。
在许多情况下,这种方法比使用依赖于用户定义顺序的通用实现特定排序谓词快得多,如 SWI 的 predsort(C_3, List, SortedList)
。
或 SICStus 的 samsort(O_2, List, SortedList)
.
我的问题归结为:
Are there cases where a sorting using
predsort/3
resp.samsort/3
cannot be replaced by some mapping,sort/2
-ing and projecting?1
7.2.1 Variable
If
X
andY
are variables which are not identical then
X
term_precedesY
shall be implementation dependent
except that during the creation of a sorted list (7.1.6.5,
8.10.3.1 j) the ordering shall remain constant.
predsort/3
仍然有资格作为
sort/2
期间排序保持不变。和
keysort/2
.
reverse/2
— 或任何线性变换。这也意味着可以实现具有重复和唯一结果的结果(类似于
keysort/2
的实现方式)。
最佳答案
首先,您可以“否定” Prolog 原子。我们就叫它atom_neg/2
(这是一个愚蠢的名字,但无论如何它做了一些愚蠢的事情):
atom_neg(A, NK) :-
atom_codes(A, Cs),
maplist(negate, Cs, NCs),
append(NCs, [0], NK).
negate(X, N) :- N is -X.
predsort
可能有用:没有人愿意
atom_neg/2
Will Ness 的解决方案。然而,它目前有一个严重的缺陷:它不允许稳定的排序。 SWI-Prolog 已经
can be used in this way ,只需将当前行为添加到
predsort/3
的规范和文档中即可。 .
关于sorting - sort/2、keysort/2 与 samsort/3、predsort/3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31573197/
ISO-Prolog 提供 sort/2和 keysort/2它依赖于术语顺序(7.2),通常称为“标准术语顺序”。 以不同顺序对列表进行排序的常用方法是映射每个元素 El以某种方式将该列表中的一对列
我是一名优秀的程序员,十分优秀!