1

我知道如何在序言中操作列表,但我在处理列表时遇到了麻烦,我正在准备考试,这是练习题之一。有人可以帮我解决它。到目前为止,我所做的所有尝试都是彻底的失败。

编写一个名为 max2D 的谓词,它将值列表的列表作为参数,并返回列表中所有值的最大值。

示例输出:57

?- max2D([[1,-7,3],[2,10],[19,3],[12]],M). 
M = 19 .
4

1 回答 1

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.
于 2013-04-23T03:00:12.983 回答