このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1269438098/426
#  [1] 授業単元:プログラム 
#  [2] 問題文(含コード&リンク):sample.txtを読み込み、データを身長の小さい人から順番に並び変えてans.txtに出力せよ。 
#  
# sample.txtの中身はこんな感じです。 
# 12 ヤマダタロウ 56.7 165.1 
# 43 タナカハナコ 44.3 156.8 
# 54 スズキイチロウ 70.3 179.2 
# 左から番号、名前、体重、身長です
# 

'sample.txtを読み込み、データを身長の小さい人から順番に並び変えてans.txtに出力せよ' :-
   get_split_lines('sample.txt',[' '],Ls),
   findall([_身長|L1],(member(L1,Ls),list_nth(4,L1,_身長)),Ls2),
   sort(Ls2,Ls3),
   findall(L2,member([_|L2],Ls3),_整列されたLs),
   put_lines('ans.txt',_整列されたLs).


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 鍵項目位置(身長,[_,_,_,_身長],[_身長]).
% 鍵項目位置(体重,[_,_,_体重,_],[_体重]).
% 鍵項目位置(身長・体重,[_,_,_体重,_身長],[_身長,_体重]).

'鍵項目順に整列(昇順)の一般解'(Ls,_鍵名,_整列されたLs) :-
      findall(L2,(member(L1,Ls),先頭に鍵項目を付加する(_鍵名,L1,L2)),Ls2),
      sort(Ls2,Ls3),
      findall(L4,(member(L3,Ls3),先頭の鍵項目を除去する(_鍵名,L3,L4)),_整列されたLs).

先頭に鍵項目を付加する(_鍵名,L1,L2) :-
      鍵項目位置(_鍵名,L1,L0),
      append(L0,L1,L2).

先頭の鍵項目を除去する(_鍵名,L1,L2) :-
      鍵項目位置(_鍵名,L2,L0),
      append(L0,L2,L1).