作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否可以使用 predsort/3
不会丢失重复值?如果没有,那我应该如何对这个术语列表进行排序?
当前排序函数:
compareSecond(Delta, n(_, A, _), n(_, B, _)):-
compare(Delta, A, B).
predsort(compareSecond, [n(3, 1, 5), n(0, 0, 0), n(8, 0, 9)], X).
X = [n(0, 0, 0), n(3, 1, 5)].
n(8,0,9)
不见了,这不是我需要的。
最佳答案
predsort
将删除重复项,但它留给比较谓词来定义哪些元素是重复的。调整您的 compareSecond
如果第二个参数比较相等,则谓词还将第一个和第三个参数与其接收的仿函数进行比较。
或者,切换到 msort
:
?- maplist(swap_1_2, [n(3, 1, 5), n(0, 0, 0), n(8, 0, 9)], Swapped),
| msort(Swapped, SortedSwapped),
| maplist(swap_1_2, Sorted, SortedSwapped).
% snip
Sorted = [n(0, 0, 0), n(8, 0, 9), n(3, 1, 5)] .
swap_1_2
的定义在哪里留给读者作为练习。
关于prolog - Predsort/3 就像 msort/2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8247032/
这是 answer 的后续关于对术语的特定参数进行排序的问题,而不为 keysort 创建新列表(如果我正确理解了原始问题)。 说我们想要 predsort/3表现得与 sort/2 完全一样:如果我
我想知道是否可以使用 predsort/3不会丢失重复值?如果没有,那我应该如何对这个术语列表进行排序? 当前排序函数: compareSecond(Delta, n(_, A, _), n(_, B
我想订购一份自定义列表。我想要订购的列表将采用这种形式... [n(_,2,_),n(_,1,_),n(_,3,_)] 我写了一个比较器 cheaper(n(_,C1,_),n(_,C2,_)) :
ISO-Prolog 提供 sort/2和 keysort/2它依赖于术语顺序(7.2),通常称为“标准术语顺序”。 以不同顺序对列表进行排序的常用方法是映射每个元素 El以某种方式将该列表中的一对列
我是一名优秀的程序员,十分优秀!