このディレクトリの索引
#  出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1390525149/23
#  お題: 
#  リストを与え、ソートされていれば昇順(AS)か降順(DES)か全て同じ要素(EQ)かを出力する 
#  ソートされていなければ先頭からソートされている個数を出力する 
#  [6,6,3,2,6,4,7,4,7,4] => 4 
#  [2,3,4,4,4,6,6,6,7,7] => AS 
#  [7,7,6,6,6,4,4,4,3,2] => DES 
#  [1,1,1,1,1,1,1,1,1,1] => EQ 
#  [] => EQ 
#  [1] => EQ 
# 
# 

'リストを与え、ソートされていれば昇順(AS)か降順(DES)か全て同じ要素(EQ)かを出力する。ソートされていなければ先頭からソートされている個数を出力する'(_リスト,全て同じ要素) :-
        全て同じ要素である(_リスト),!.
'リストを与え、ソートされていれば昇順(AS)か降順(DES)か全て同じ要素(EQ)かを出力する。ソートされていなければ先頭からソートされている個数を出力する'(_リスト,昇順) :-
        昇順にソートされている(_リスト),!.
'リストを与え、ソートされていれば昇順(AS)か降順(DES)か全て同じ要素(EQ)かを出力する。ソートされていなければ先頭からソートされている個数を出力する'(_リスト,降順) :-
        降順にソートされている(_リスト),!.
'リストを与え、ソートされていれば昇順(AS)か降順(DES)か全て同じ要素(EQ)かを出力する。ソートされていなければ先頭からソートされている個数を出力する'(_リスト,_個数) :-
        ソートされていなければ先頭からソートされている個数を出力する(_リスト,_個数).

全て同じ要素である([],_).
全て同じ要素である([A|R],A) :-
        全て同じ要素である(R,A).

昇順にソートされている(_リスト) :-
        forall(append(_,[A,B|_],_リスト),A @=< B).

降順にソートされている(_リスト) :-
        forall(append(_,[A,B|_],_リスト),A @>= B).


ソートされていなければ先頭からソートされている個数を出力する(L,_先頭からソートされている個数) :-
        findall(Len,(
                    append(L1,L2,L),
                    length(L1,Len),
                    (昇順にソートされている(L1);降順にソートされている(L1)),
                _長さならび),
        最大値(_長さならび,_先頭からソートされている個数).

最大値([A|R],_最大値) :-
        最大値(R,A,_最大値).

最大値([],_最大値,_最大値).
最大値([A|R],_最大値_1,_最大値) :-
        A @> _最大値_1,
        最大値(R,A,_最大値),!.
最大値([A|R],_最大値_1,_最大値) :-
        最大値(R,_最大値_1,_最大値).