このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1286978599/510
#  [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク):文字列を保持する文字配列を三つ宣言し、 
#  キーボード入力で文字列を与える その後文字数の少ない順に入れ替え、その結果を表示するプログラムを作成せよ 
#  実行例 
#  入力0 ; aaa 
#  入力1 ; aaaaa 
#  入力2 ; aaaaaa 
#  結果 
#  0 ; aa 1; aaaaa 2 ; aaaaaa 
#  

'文字列を保持する文字配列を三つ宣言し、キーボード入力で文字列を与える。その後文字数の少ない順に入れ替え、その結果を表示する' :-
        length(L,3),
        'キーボード入力で文字列を与える。'([],L),
        その後文字数の少ない順に入れ替え(L,_文字数の少ない順の行ならび),
        その結果を表示する([],_文字数の少ない順の行ならび).

'キーボード入力で文字列を与える。'(_,[]) :- !.
'キーボード入力で文字列を与える。'(LN,[_行|R]) :-
        length(LN,N),
        write_formatted('入力%t ; ',[N]),
        get_line(_行),
        'キーボード入力で文字列を与える。'([_|LN],R).

その後文字数の少ない順に入れ替え(L,_文字数の少ない順の行ならび) :-
        findall([_文字数,_行],(
                    append(_,[_行|_],L),
                    sub_atom(_行,0,_文字数,0,_行)),
                _先頭に文字数を付加した行ならび),
        sort(_先頭に文字数を付加した行ならび,_先頭の文字数をキーとする昇順の行ならび),
        findall(_行,
                    append(_,[[_,_行]|_],_先頭の文字数をキーとする昇順の行ならび),
                _文字数の少ない順の行ならび).

その結果を表示する(_,[]) :- write('\n'),!.
その結果を表示する(LN,[_行|R]) :-
        length(LN,N),
        write_formatted('%t ; %t  ',[N,_行]),
        その結果を表示する([_|LN],R).