このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1274827528/863 
#  [2]問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10697.txt 
# [2]問題文:10人の三教科(国語・数学・英語)の点数を二次配列に格納し終えたのち、 
# 実行例のように"n人目 国語の点数 数学の点数 英語の点数"を表示するプログラムを書け 
#  点数は1~100の乱数によって与えること。 
#   また、二次的配列に格納された3教科の点数を各人ごとに合計し、合計点として1次元配列に格納する。 
#  格納し終えたのち、1次的配列の先頭から合計点を表示する。 
#  一次元配列に格納された合計点を降順にソートし、一次元配列の先頭から合計点を表示する。 
#  ソートの方法として、バブルソースを使用する 
# <<実行例>> (seed=97の場合) 
#        国語 数学 英語 
#  1人目:  75   55   84 
#  2人目:   3   58   90 
#  3人目: 100   60   61 
#  4人目:  19   39   67 
#  5人目:  90   99   15 
#  6人目:   5   58   59 
#  7人目:  20   15   47 
#  8人目:  46   12   94 
#  9人目:  22   93   27 
# 10人目:  90   90   35 
# 
# 合計点(ソート前): 214 151 221 125 204 122  82 152 142 215 
# 合計点(ソート後): 221 215 214 204 152 151 142 125 122  82 

図と同じASCII文字を表示する :-
        findall(N,for(32,N,123),L),
        'N個組'(4,L,L1),
        append(_,[[N1,N2,N3,N4]|R],L1),
        'N進数'(16,N1,S1),
        'N進数'(16,N2,S2),
        'N進数'(16,N3,S3),
        'N進数'(16,N4,S4),
        write_formatted('%1s0x%2s;%2d%10s0x2sd;%2d%10s0x%2s;2d%10s0x%2s;2d\n',[S1,N1,S2,N2,S3,N3,S4,N4]),        
        R = [].

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

スペースを圧縮してスペース以外の要素はQに置換する([],Q,[]).
スペースを圧縮してスペース以外の要素はQに置換する([' '|R1],Q,[P|R2]) :-
        スペースならびを切り取る([' '|R1],L1,R),
        スペース圧縮表現(L1,P),
        スペースを圧縮してスペース以外の要素はQに置換する(R,Q,R2),!.
スペースを圧縮してスペース以外の要素はQに置換する([A|R1],Q,[Q|R2]) :-
        スペースを圧縮してスペース以外の要素はQに置換する(R1,Q,R2).

スペースならびを切り取る([],[],[]) :- !.
スペースならびを切り取る([A|R1],[],[A|R1]) :-
        \+(A = ' '),!.
スペースならびを切り取る([' '|R1],[' '|R2],R) :-
        スペースならびを切り取る(R1,R2,R).

スペース圧縮表現([],'') :- !.
スペース圧縮表現(L,S) :-
        length(L,Len),
        concat_atom(['%',Len,s],S).