このディレクトリの索引

http://pc11.2ch.net/test/read.cgi/php/1147830986/155
# $number = array(21,22,5,-2,4,25,-7,27);
# 上記のような配列がある場合に以下に列挙する期待値どおりにせよ。
#
# $number = array(21,22,5,-2,4,23,-7,24);
#
# やり方とアルゴリズム
#
# まず配列の0番目と1番目を比較し、比較される側のほうが大きければ比較する側の配>列を+1にして繰り返す。
# 比較される側のほうが小さい場合、比較対象をずらして(配列に+1して)比較される側>の数が大きくなるまで処理を繰り返す。
# 比較する数より比較される数のほうが大きくなったときその数字を比較する数+1にす>る。
# つまり、$number = array(21,22,5,-2,4,25,-7,27);の場合はまず
# 21と22を比較、22のほうが大きいので次に22と5を比較、5のほうが小さいので22と-2>を比較、-2のほうが小さいので22と4を比較、
# これも4のほうが小さいので22と25を比較、25のほうが大きいので25を22に+1して23にする。
# 次に23と-7を比較、-7のほうが小さいので23と27を比較、27のほうが大きいので27を23+1にし、24にする。

t840([A|R1],[A|R2]) :-
  t840(A,R1,R2).

t840(_,[],[]).
t840(A,[B|R1],[B|R2]) :-
  A >= B,
  t840(A,R1,R2).
t840(A,[B|R1],[C|R2]) :-
  A < B,
  C is A + 1,
  t840(C,R1,R2).