このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1328276597/146
#  [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク): 
#  http://ime.nu/codepad.org/gcasKWhG 
#  ハッシュ表を用いて単語とその出現回数を登録し、 
#  さらに単語の出現回数順にソートするソート関数を作成せよ。 
#  [3.1] OS:Mac 
#  [3.2] コンパイラ名とバージョン:gcc 
#  [3.3] 言語:C 
#  [4] 期限:2月11日まで 
#   
#  基本的な骨格は出来ましたが、ソートの関数が作れませんでした。 
#  よろしくお願いします。 
#   
#  Macのターミナルを利用してテキストファイルを読み込み、単語(基本的に英単語)を登録します。 
# 
# 

:- dynamic(ハッシュ表/2).

'ハッシュ表を用いて単語とその出現回数を登録し、さらに単語の出現回数順にソートする'(_テキストファイル) :-
        abolish(ハッシュ表/2),
        get_split_lines(_テキストファイル,[' ','\n',',','.',':',';'],LL),
        平坦化(LL,_語彙ならび),
        'ハッシュ表を用いて単語とその出現回数を登録し'(_語彙ならび),
        'さらに単語の出現回数順にソートする'(_出現回数順にソートした単語ならび).

'ハッシュ表を用いて単語とその出現回数を登録し'([]).
'ハッシュ表を用いて単語とその出現回数を登録し'([_語彙|R]) :-
        retract(ハッシュ表(_語彙,_回数)),
        _更新された回数 is _回数 + 1,
        asserta(ハッシュ表(_語彙,_更新された回数)),
        'ハッシュ表を用いて単語とその出現回数を登録し'(R),!.
'ハッシュ表を用いて単語とその出現回数を登録し'([_語彙|R]) :-
        asserta(ハッシュ表,_語彙,1),
        'ハッシュ表を用いて単語とその出現回数を登録し'(R),!.

'さらに単語の出現回数順にソートする'(_出現回数順にソートした単語ならび) :-
        findall([_回数,_語彙],(
                    ハッシュ表(_語彙,_回数)),
                L1),
        降順整列(L1,L2),
        findall(_語彙,(
                    member([_,_語彙],L2)),
                _出現回数順にソートした単語ならび).

降順整列([],[]).
降順整列([_軸要素|R1],L2) :-
        降順分割(_軸要素,R1,_より大きい要素ならび,_等しいかより小さい要素ならび),
        降順整列(_より大きい要素ならび,_整列したより大きい要素ならび),
        降順整列(_等しいかより小さい要素ならび,_整列した等しいかより小さい要素ならび),
        append(_整列したより大きい要素ならび,[_軸要素|_整列した等しいかより小さい要素ならび],L2).

降順分割(_,[],[],[]).
降順分割(_軸要素,[_要素|R1],[_要素|R2],R3) :-
        _要素 @> _軸要素,
        降順分割(_軸要素,R1,R2,R3).
降順分割(_軸要素,[_要素|R1],R2,[_要素|R3]) :-
        _要素 @=< _軸要素,
        降順分割(_軸要素,R1,R2,R3).