このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1370255305/69
#  
#  配列を使わずに printf for while if を使って3ケタカンマ区切りをすることができますか? 
#  

'配列を使わずに printf for while if を使って3ケタカンマ区切りして表示する'(0) :-
        write('0').
'配列を使わずに printf for while if を使って3ケタカンマ区切りして表示する'(N) :-
        N > 0,
        '3ケタカンマ区切りして表示する'(N).
'配列を使わずに printf for while if を使って3ケタカンマ区切りして表示する'(N) :-
        '負数の場合はマイナス記号を表示して、-1を掛けて正数とする'(N,N_1),
        '3ケタカンマ区切りして表示する'(N_1).

'負数の場合はマイナス記号を表示して、-1を掛けて正数とする'(N,N_1) :-
        N < 0,
        write('-'),
        N_1 is N * (-1).

'3ケタカンマ区切りして表示する'(0).
'3ケタカンマ区切りして表示する'(N) :-
       '3ケタ未満になったら数値をヘッドゼロサプレスで表示する(ただしゼロを除外)'(N).
'3ケタカンマ区切りして表示する'(N) :-
       '3ケタ以上有る時は最後の3ケタとそれ以上に分離して'(N,N_1,N_2),
       '3ケタカンマ区切りして表示する'(N_2),
       '最後の3ケタの数値をカンマ表示後にヘッドゼロサプライで表示する'(N_1).

'3ケタ未満になったら数値をヘッドゼロサプレスで表示する(ただしゼロを除外)'(N) :-
        between(1,999,N),
        writef('%t',[N]).

'3ケタ以上有る時は最後の3ケタとそれ以上に分離して'(N,N_1,N_2) :-
        N >= 1000,
        N_1 is N mod 1000,
        N_2 is N // 1000.

'最後の3ケタの数値をカンマ表示後にヘッドゼロサプライで表示する'(N) :-
       write(','),
       '3ケタの数値をヘッドゼロサプライで表示する'(N).

'3ケタの数値をヘッドゼロサプライで表示する'(N) :-
       N_1 is N + 1000,
       atom_number(A,N_1),
       sub_atom(A,1,3,_,B),
       writef('%t',[B]).