list - 如何查找和输出包括最大数量(所有列表)的列表?序言
问题描述
我需要在 Prolog 的列表列表中找到最大数量,然后“打印”(在新列表中输出)包含此最大数量的列表。
例如:lists_with_max([[1,2,3],[2,3,44],[44,5,6]],Lists)。应该输出:Lists = [[2,3,44],[44,5,6]]
下面的代码是我能想到的最接近的代码并且没有错误,但它显然是错误的,因为每次它找到一个新的最大值然后输出错误的列表。
'max' 查找列表中的最大数量。'flat' “展平”列表。'maxl' 查找列表列表中的最大数量。
max([X], X).
max([H|T], H):-
max(T, MaxT),
H > MaxT.
max([H|T], MaxT):-
max(T, MaxT),
H =< MaxT.
flat([], []).
flat([H|T], [H|LT]):-
atomic(H),
flat(T, LT).
flat([H|T], L):-
flat(T, LT),
not(atomic(H)),
flat(H, LH),
append(LH, LT, L).
maxl(List,Max):-
flat(List,Newlist),
max(Newlist,Max).
lists_with_max([],[]).
lists_with_max([H|T],[H|L]):-
maxl([H|T],Max),
member(Max,H),
lists_with_max(T,L).
lists_with_max([_H|T],L):-
lists_with_max(T,L).
解决方案
这是使用构建谓词max_list/2、 maplist /3、include/3和memberchk/2的另一种方法:
lists_with_max(LL, LL1):-
maplist(max_list, LL, ML),
max_list(ML, M),
include(memberchk(M), LL, LL1).
推荐阅读
- python-3.x - 如何让一个物体自己移动以避免与其他物体发生碰撞
- arrays - 如何在 Swift5 中将 URL 图像转换为 UIImages 并附加到数组中
- angular - Angular 数据服务被调用两次
- php - Laravel Pagination 使数据记录重复显示
- python - 计算两个日期之间的月份
- python - Python3:如何使用索引更新列表中的变量?
- php - 如何使用 URL 中的特定字符串在 PHP 中显示消息?
- c++ - 修复数组未正确分配
- python - 为什么有些 Github 存储库不能在 colab 中正确导入,而其他存储库则不能?(并非所有公共 Github 存储库都对导入可见)
- php - 如何在不使用 php 函数的情况下从数组中查找缺失的数字?