我知道如何在序言中操作列表,但我在处理列表时遇到了麻烦,我正在准备考试,这是练习题之一。有人可以帮我解决它。到目前为止,我所做的所有尝试都是彻底的失败。
编写一个名为 max2D 的谓词,它将值列表的列表作为参数,并返回列表中所有值的最大值。
示例输出:57
?- max2D([[1,-7,3],[2,10],[19,3],[12]],M).
M = 19 .
我知道如何在序言中操作列表,但我在处理列表时遇到了麻烦,我正在准备考试,这是练习题之一。有人可以帮我解决它。到目前为止,我所做的所有尝试都是彻底的失败。
编写一个名为 max2D 的谓词,它将值列表的列表作为参数,并返回列表中所有值的最大值。
示例输出:57
?- max2D([[1,-7,3],[2,10],[19,3],[12]],M).
M = 19 .
让我们分两步来做。首先,让我们获取列表的最大值:
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.