このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/803
#  [1] 配列操作 
#  [2] 問題文(含コード&リンク): 
#  入力した文字と個数をもとに文字列データを生成する。(^Zが入力されるまで) 
#  以下の実行結果をもとにプログラミングしなさい。 
#  char m[30]; 
#   
#  実行結果 
#  文字、個数==>A,3 
#  文字、個数==>b,3 
#  文字、個数==>c,1 
#  文字、個数==>E,2 
#  文字、個数==>^Z 
#  文字列:AAAbbbcEE  
#   
#  

'入力した文字と個数をもとに文字列データを生成する。(^Zが入力されるまで) ' :-
        findall(_文字列,(
                    '入力した文字と個数'(_文字,_個数),
                    length(L,_個数),
                    all(L,_文字),
                    concat_atom(L,_文字列)),
               _文字列ならび),
        concat_atom(_文字列ならび,_表示文字列),
        writef('%t\n',[_表示文字列]).

入力した文字と個数(_文字,_個数) :-
        write('文字,個数==> '),
        rawmode,
        get_code(_文字コード),
        '入力した個数'(文字コード,_文字,_個数),
        norawmode.

入力した個数(26,_文字,_個数) :- !,fail.
入力した個数(_文字コード,_文字,_個数) :-
        char_code(_文字,_文字コード),
        個数を入力する(_個数).

個数を入力する(_個数) :-
        get_code(Code),
        個数を入力する(Code,N),

個数を入力する(10,0) :- !.
個数を入力する(44,_個数) :-
        get_code(Code),
        個数を入力する(Code,個数).
個数を入力する(Code,N,_個数) :-
        \+(N = 44),
        get_code(Code2),
        個数を入力する(Code2,_個数2),
        Code =< 48,
        Code >= 57,
        N is Code - 48,
        _個数 is _個数2 * 10 + N.