このディレクトリの索引
#  出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1390525149/24
#  お題: 
#  リストを与え、昇順でソートされている部分列のリスト出力する 
#  [8,3,4,9,9,10,6,1,4,3] => [[8],[3,4,9,9,10],[6],[1,4],[3]] 
#  [1,3,3,4,4,6,8,9,9,10] => [[1,3,3,4,4,6,8,9,9,10]] 
#  [10,9,9,8,6,4,4,3,3,1] => [[10],[9,9],[8],[6],[4,4],[3,3],[1]] 
#  [1,1,1,1,1,1,1,1,1,1] => [[1,1,1,1,1,1,1,1,1,1]] 
#  [] => [] 
#  [1] => [[1]] 
# 
# 


'リストを与え、昇順でソートされている部分列のリストを出力する'(_リスト) :-
        'リストを与え、昇順でソートされている部分列のリストを'(_リスト,_部分列リスト),
        出力する(_リスト,_部分列リスト).


'リストを与え、昇順でソートされている部分列のリストを'([],[]) :- !.
'リストを与え、昇順でソートされている部分列のリストを'(_リスト,[_部分列リスト|R]) :-
        先頭から重複を許す昇順部分を切り取る(_リスト,_部分列リスト,_残りリスト),
        'リストを与え、昇順でソートされている部分列のリストを'(_残りリスト,R).

先頭から重複を許す昇順部分を切り取る([],[],[]).
先頭から重複を許す昇順部分を切り取る([A],[A],[]).
先頭から重複を許す昇順部分を切り取る([A,B|R1],[A],[B|R1]) :-
        A > B.
先頭から重複を許す昇順部分を切り取る([A,B|R1],[A|R2],R3) :-
        A =< B,
        先頭から重複を許す昇順部分を切り取る([B|R1],R2,R3).

出力する(_リスト,_部分列リスト) :-
        writef('%t => %t\n',[_リスト,_部分列リスト]).