gpt4 book ai didi

prolog - 如何在序言中按字母*和*数字排序?

转载 作者:行者123 更新时间:2023-12-04 22:50:14 24 4
gpt4 key购买 nike

我在 Prolog 中有一个列表,如下所示:

[(b,y,3),(p,z,1),(p,y,3),(b,y,2),(p,z,2),(p,x,3),...]

其中第一个元组的第一个元素在 [b,p] 中,第二个在 [x,y,z] ,第三个在 [1,2,3,4,5,6,7] .

如何对这个元组列表进行排序,以便上面的列表示例变为:
[(b,y,2),(b,y,3),(p,x,3),(p,y,3),(p,z,1),(p,z,2),...]

也就是说,b 在 p 之前,x 在 y 和 z 之前,并且数字被排序。

最佳答案

如果您想对 SICStus 和许多其他 Prolog 中的保留重复条目进行排序,请使用 keysort/2 :

msort(Keys, KeysS) :-
keys_pairs(Keys, Pairs), % pairs_keys(Pairs, Keys)
keysort(Pairs, PairsS),
pairs_keys(PairsS, KeysS).

keys_pairs([], []).
keys_pairs([K|Ks], [K-_|Ps]) :-
keys_pairs(Ks, Ps).

pairs_keys([], []).
pairs_keys([K-_|Ps],[K|Ks]) :-
pairs_keys(Ps, Ks).

SICStus 和许多其他 Prolog 都需要 keys_pairs/2pairs_keys/2进行有效的映射。

关于prolog - 如何在序言中按字母*和*数字排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7864022/

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