gpt4 book ai didi

prolog - Predsort/3 就像 msort/2

转载 作者:行者123 更新时间:2023-12-04 12:12:15 25 4
gpt4 key购买 nike

我想知道是否可以使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com