我正在寻找sort/4的替代方案。我目前无法使用内置版本。
如果它是可用的,那么我所需要的语法将类似于这个sort(1, @>=, List, Sorted)。列表中的元素看起来像这个([Value:x:y,z:a]:[], ...)。结果必须根据值参数按降序排序。
用于测试的示例列表:
[ 16:x:y,z:a:[],64:x:y,z:a:[],4:x:y,z:a:[],1024:x:y,z:a:[],0:x:y,z:a:[],100:X:y:y,z:a:[],100:y:y,z: 50:x:y,z:a:[],-100:x:y,z:a:[],0:y,z:a:[],X:y,z:a:[]
发布于 2016-02-22 19:38:58
只需提取密钥,将其放在结构前面,调用sort/2 (或msort/2,以避免丢失重复项),然后从排序列表中删除键。
可以使用相同的代码(列表访问)将密钥放在前面并删除它。最后一步将反转列表,以获得降序。
alternative_sort(Structs, Sorted) :-
structs_keyed(Structs, Keyed),
sort(Keyed, Temp),
structs_keyed(TempR, Temp),
reverse(TempR, Sorted).
structs_keyed(Sorted, Temp) :- % assume library(yall) available
maplist([S,K]>>(S=([Value|_]:_),K=Value/S), Sorted, Temp).要成为真,因为排序键值--它是第一个值元素--可以简化为
alternative_sort(Structs, Sorted) :-
sort(Structs, Ascending),
reverse(Ascending, Sorted).https://stackoverflow.com/questions/35561116
复制相似问题