我在开始时有一个[1,2,3,1,0]的列表,但是需要将它拆分成多个子列表,其中新列表变为[[1,2,3],[1], [0]]。
我在prolog中所知道的基本概念是比较数字。
ascending([Head | [HeadTail|TailTail]]) :- Head =< HeadTail.
答案 0 :(得分:2)
我们可以使用基本列表&#39;模式匹配
ascending([A], [[A]]).
ascending([A,B|T], R) :-
( A > B -> R = [[A],P|Q] ; P = [M|N], R = [[A,M|N]|Q] ),
ascending([B|T], [P|Q]).
试验:
1 ?- ascending([1,2],X).
X = [[1, 2]] ;
false.
2 ?- ascending([2,1],X).
X = [[2], [1]] ;
false.
3 ?- ascending([1,2,3,1,0],X).
X = [[1, 2, 3], [1], [0]] ;
false.
答案 1 :(得分:0)
% Trivial base case
asc([],[]).
% Invoke helper
asc([Ah|Ar],B) :- asc(Ar,[Ah],[],B).
% asc(InputList, CurrentSublistReversed, PreviousSublistsReversed, Result )
% No more input; add unreversed CurrentSublist & unreverse result
asc([],A,C,D) :- reverse(A,Ar), reverse([Ar|C],D).
% Next value gets added to head of current reversed sublist
asc([Ah|Ar],[Bh|Bt],C,D) :- Ah >= Bh, asc( Ar, [Ah,Bh|Bt], C, D).
% Unreverse current sblist, add to head of reversed list of previous sublists; start new sublist
asc([Ah|Ar],[Bh|Bt],C,D) :- Ah < Bh, reverse( [Bh|Bt], Br ), asc( Ar, [Ah], [Br|C], D ).