このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1291471791/884
#  分からないプログラミング課題があります。 
#  問)N個の文字列を入力すると文字列の長さが短い順、同じ長さの時は順不同、に 
#    並べ替えて表すプログラムを作りなさい。 
#   
#  二次元配列とポインタ配列を使うらしいんですけど、コンパイル時にエラーばかり出てしまいます。 
#  どなたか分かる方いらっしゃいますか? 
# 

'N個の文字列を入力すると文字列の長さが短い順、同じ長さの時は順不同、に並べ替えて表す' :-
        'N個の文字列を入力すると'(_N個の文字列),
        '文字列の長さが短い順、同じ長さの時は順不同、に並べ替えて'(_N個の文字列,_長さ順に並べ替えた文字列),
        表す(_長さ順に並べ替えた文字列).

'N個の文字列を入力すると'(_N個の文字列) :-
        'N個の'(_N個),
        length(_N個の文字列,_N個),
        'N個の文字列を入力する'(_N個の文字列).

'N個の'(_N個) :-
        write('何個の文字列を入力しますか : '),
        get_line(Line),
        'N個の入力診断'(Line,_N個),!.
'N個の'(_N個) :- 'N個の'(_N個).

'N個の入力診断'(Line,_N個) :-
        atom_to_term(Line,_N個,_),
        integer(_N個),
        _N個 > 0,!.
'N個の入力診断'(Line,_N個) :-
        write_formatted('入力された %t からは正の整数が得られません。再入力をお願いします。\n',[Line]),
        fail.

'N個の文字列を入力する'([]) :- !.
'N個の文字列を入力する'([_文字列|R]) :-
        'N個の文字列を入力する'(R).

'文字列の長さが短い順、同じ長さの時は順不同、に並べ替えて'(_N個の文字列,_長さの短い順に並べ替えた文字列ならび) :-
        findall([_長さ,_文字列],(
                    append(_,[_文字列|_],_N個の文字列),
                    sub_atom(_文字列,0,_長さ,0,_文字列)),
                _長さを鍵に整列したならび),
        sort(長さを鍵に整列した,_長さの短い順に並べ替えた文字列ならび).

表す(_長さの短い順に並べ替えた文字列ならび) :-
        append(_,[[_|_文字列]|R],_長さの短い順に並べ替えた文字列ならび),
        write_formatted('%t\n',[_文字列]),
        R = [].