prolog中的列表清单?

时间:2013-04-23 00:34:57

标签: prolog

我知道如何在prolog中操作列表,但我在列表列表方面遇到问题,我正在学习考试,这是一个练习题。有人可以帮我解决这个问题。到目前为止我所做的所有尝试都是完全失败的。

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

示例输出:57

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

1 个答案:

答案 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.