gpt4 book ai didi

prolog - 按列表的大小对结构列表进行排序

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

我需要按以下格式对结构列表进行排序:(A, B, [...]) 按列表的长度。

例如,如果我有:

[(A,B,[1,2,3,4]),(A,B,[1,2]),(A,B,[1,2,3,4,5]),(A,B,[1,2,3])]

排序后我想要这个:

[(A,B,[1,2]),(A,B,[1,2,3]),(A,B,[1,2,3,4]),(A,B,[1,2,3,4,5])]

我该怎么做?

最佳答案

将每个元素 El 映射到结构 N-El 并使用内置的 keysort/2

el_keyed(El,N-El) :-
El = (_,_,L),
length(L, N).

list_lulasorted(Els, ElsS) :-
maplist(el_keyed, Els, KVs),
keysort(KVs, KVsS),
maplist(el_keyed, ElsS, KVsS).

参见 this answer如果您的 Prolog 系统不提供 maplist/3

最后一步可能会被“加速”:

keyvalue_value(_-V, V).

..., maplist(keyvalue_value, KVsS, ElsS), ...

或者,使用 library(lambda)不需要辅助定义:

list_lulasorted(Els, ElsS) :-
maplist(\El^(N-El)^( El=(_,_,L), length(L, N) ), Els, KVs),
keysort(KVs, KVsS),
maplist(\(_-V)^V^true, KVsS, ElsS).

一些注意事项:(A, B, L) 不像在 Haskell 或 ML 中那样频繁。相反,要么使用像 .(A, B, L) 这样的结构,要么使用 (A*B)-L 取决于 AB其实就是这个意思。

关于prolog - 按列表的大小对结构列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27760689/

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