このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/954
#  [1] 授業単元:計算機アルゴリズム  
#  [2] 問題文(含コード&リンク):  
#  設問1-1 
#  プログラム例7.2.1を、最小値の要素番号idx(x[idx]が最小値となるようなidx)を求めるように変更した後、 
#  その最小値x[idx]と先頭要素x[0]の2つの要素を入れ替え、配列の全要素を表示するようにしなさい。 
#  この実行の結果、x[0]はx[0],x[1],・・・,x[9]の最小値となります。 
#  プログラム例7.2.1 
#  ttp://www.dotup.org/uploda/www.dotup.org2207772.txt.html 
#  
#  include 
#  
#  int main(void)
#  {
#  int n = 10;
#    int x[10] = {3, 5, 1, 9, 5, 7, 4, 2, 6, 10};
#    int max, i;
#    max = x[0];
#    for (i = 1; i < n; i++)
#      {
#        if (x[i] > max) max = x[i];
#      }
#    printf("最大値は %d です. \n", max);
#    return 0;
#  }
#  
#  設問1-2 
#  次にx[1],x[2],・・・,x[9]に対し上記設問1-1と同じ操作を行い、次にx[2],x[3],・・・,x[9]に対し上記設問1-1と同じ操作を行い、 
#  ・・・,最後にx[8],x[9]に対し上記設問1-1と同じ操作を行うという手順で処理を進めると最終的に配列xを昇順にソーティングできます。 
#  そのようにプログラムを作成しなさい。 
#  設問1-3 
#  上記設問1-2をfor文の2重ループで書きなさい。 
#  

'ならびの最小値要素を求め先頭要素と入れ替える。次に先頭より後のならびに対して同様にこれを繰り返し、最終的にならびを整列させる'([],[]) :- !.
'ならびの最小値要素を求め先頭要素と入れ替えて、次に先頭より後のならびに対して同様にこれを繰り返し、最終的にならびを整列させる'(L1,[A|R]) :-
        'ならびの最小値要素を求め先頭要素と入れ替える'(L1,[A|L2]),
        'ならびの最小値要素を求め先頭要素と入れ替えて、次に先頭より後のならびに対して同様にこれを繰り返し、最終的にならびを整列させる'(L2,R),!.

'ならびの最小値要素を求め先頭要素と入れ替える'(L1,L2) :-
        append(L0,[A|R],L1),
        \+((member(B,L0),B > A)),
        \+((member(C,R),C > A)),
        'L0の先頭要素とAを入れ替える'(L0,A,R,L2),!.

'L0の先頭要素とAを入れ替える'([],A,R,[A|R]) :- !.
'L0の先頭要素とAを入れ替える'([A0|R0],A,R,L2) :-
        append([A|R0],[A0|R],L2).