list - 在 Prolog 中,对两个相对于彼此的列表进行排序
问题描述
有没有办法对两个列表进行相对排序。
假设我有两个列表如下:
Age = [14,12,17,15].
Name = ["Frank", "Micheal","Paul","Alex"].
Frank 的年龄是 14 岁,而 Alex 的年龄是 15 岁。
我想对 Age 列表进行排序,还希望 Name 列表更改其相对于 Age 列表的顺序。所以,基本上我想在结果中看到的是:
Age = [12, 14, 15, 17]
Name = ["Micheal", "Frank", "Alex", "Paul"].
有什么建议么?
解决方案
您可以将它们映射到单个关联列表,排序,然后取消映射:
associate(X, Y, X-Y).
sort_age_name(Ages, Names, SortedAges, SortedNames) :-
maplist(associate, Ages, Names, AgesNames),
msort(AgesNames, SortedAgesNames),
maplist(associate, SortedAges, SortedNames, SortedAgesNames).
第一次maplist
调用将这两个列表与一个列表相关联,其中每个元素是Age-Name
,具有关联名称的年龄。您可以将其视为将两个列表“压缩”在一起。
该msort
调用按年龄对年龄-姓名关联列表进行排序。
第二个maplist
调用将两个单独的列表与排序的关联列表相关联。它基本上将关联列表“解压缩”到组件列表中。
由于您在两个列表之间具有这种关联,因此如果它们是一个单一的关联列表开始是有意义的。将它们分开更麻烦。
推荐阅读
- c - 如何将多个值添加到结构中
- c# - Netsuite suitetalk - 如何通过 Web 服务获取审计跟踪
- google-cloud-platform - 限制 BigQuery 扫描任何给定查询所需的记录数?
- html - CSS:如何翻转反转书写模式“vertical-lr”
- android - 在 Android 上的 Chrome 中不显示 Font Awesome
- python - Keras CNN 分类器
- python - 使用请求库 python 登录
- azure-ad-b2c - 如何使用 AD B2C 自动化获取带有自定义声明的令牌
- c++ - 为什么文本文件中的字符串没有添加到我的字符串数组中?
- python - 如何将一个类的变量的值传递给另一个类?