在Prolog中列出清单列表

时间:2016-11-12 07:34:41

标签: list sorting search prolog find

我想在prolog中的列表列表中找到一个特定的列表,假设列表是:

L[L1,L2,L3......]

L中的每个列表都采用以下格式:

L1[A,B,C,D]

我想找一个A最小的Ln,我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

基本案例是包含单个元素(列表)的列表:

find([X],X).

然后,递归地,您可以将头部列表与尾部的最小列表进行比较:

find([[X|Xs]|T],[X|Xs]) :- find(T,[Y|_]), X =< Y.
find([[X|_]|T],[Y|Ys]) :- find(T,[Y|Ys]), X > Y.

或更有效率:

find([[X|Xs]|T],L) :- find(T,[Y|Ys]), (X =< Y, L = [X|Xs] ; X > Y, L = [Y|Ys]).

例如:

?- find([[3,1,4,3],[1,1,2,4],[2,4,3,1]],X).
X = [1, 1, 2, 4] ;