我知道如何在prolog中操作列表,但我在列表列表方面遇到问题,我正在学习考试,这是一个练习题。有人可以帮我解决这个问题。到目前为止我所做的所有尝试都是完全失败的。
编写一个名为max2D的谓词,它将值列表列表作为参数,并返回列表中所有值的最大值。
示例输出:57
?- max2D([[1,-7,3],[2,10],[19,3],[12]],M).
M = 19 .
答案 0 :(得分:0)
让我们分两步完成。首先,让我们得到一个列表的最大值:
maxlist([X,Y|Z], Max) :-
X > Y -> maxlist([X|Z], Max)
; maxlist([Y|Z], Max).
maxlist([X], X).
看起来不错:
?- maxlist([1,5,7,3,5], Max).
Max = 7.
让我们使用maplist/3
将其应用于二维列表。每个最大值的最大值将是总体最大值:
max2D(List, Max) :-
maplist(maxlist, List, EachMax),
max_list(EachMax, Max).
这似乎有效:
?- max2D([[1,-7,3],[2,10],[19,3],[12]], X).
X = 19 ;
false.