このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/470
#  [2]つぎの関数をつくる 
#  void zeroSuppress(char *src, char *dst, char pos, char flg) 
#  posは小数点を挿入する位置で1なら1桁目と2桁目の間に 
#  小数点があるものとしてゼロサプレスします。 
#  文字数<=posの場合処理しない。 
#  動きの例 
#  src = "0123456"、 pos = 1 →dst = "123456" 
#  src = "0012500" pos = 2 →dst ="12500" 
#  src = "0000001" pos = 3 →dst ="0001" 
#  src = "000B12" pos = 2 →dst ="000"(Bとそれ以降は無視) 
#  flg = 1だと\0でうめる 
#  src = "0000001" pos = 3 →dst = "\0\0\00001" 
# 
# 

頭部ゼロサプレス(_数字文字列,_小数点位置文字,_フラグ,_表示文字列) :-
        atom_codes(_数字文字列,_コードならび),
        文字数値変換(_小数点位置文字,_小数点位置),
        コードならび変換後の頭部ゼロサプレス(_コードならび,_小数点位置,_フラグ,_表示コードならび),
        atom_codes(_表示文字列,_表示コードならび),!.

コードならび変換後の頭部ゼロサプレス(_コードならび,_小数点位置,_フラグ,_表示文字列) :-
        'B文字以下の除去'(_コードならび,_コードならび_1),
        整数部と小数点部を分離(_コードならび_1,_小数点位置,_整数部コードならび,_小数部コードならび),
        '整数部頭部のコード変換'(_整数部コードならび,_フラグ,_変換された整数部コードならび),
        append(_変換された整数部コードならび,[46|_小数部コードならび],_表示コードならび),!.


文字数値変換(_小数点位置文字,_小数点位置) :-
        atom_to_term(_小数点位置文字,_小数点位置,_).

'B文字以下の除去'(_コードならび_1,_コードならび_2) :-
        append(_コードならび_2,[66|R],_コードならび_1),!.
'B文字以下の除去'(_コードならび,_コードならび).

整数部と小数点部を分離(_コードならび,_小数点位置,_整数部コードならび,_小数部コードならび) :-
        length(_小数部コードならび,_少数点位置),
        append(_整数部コードならび,_小数部コードならび,_コードならび),!.
整数部と小数点部を分離(_コードならび,_小数点位置,_整数部コードならび,_小数部コードならび) :-
        'コードが7桁に満たない時は頭部にゼロを詰めておく'(_コードならび,_頭部にゼロを詰めたコードならび),
        整数部と小数点部を分離(_頭部にゼロを詰めたコードならび,_小数点位置,_整数部コードならび,_小数部コードならび).

'コードが7桁に満たない時は頭部にゼロを詰めておく'(_コードならび,_頭部にゼロを詰めたコードならび) :-
        length(_頭部にゼロを詰めたコードならび,7),
        append(L1,_コードならび,_頭部にゼロを詰めたコードならび),
        all(L1,48).

整数部頭部のコード変換([],_,[]).
整数部頭部のコード変換([A|R],_,[A|R]) :-
        \+(A = 48),!.
整数部頭部のコード変換([48|R1],'1',[0|R2]) :-
        整数部頭部のコード変換(R1,R2),!.
整数部頭部のコード変換([48|R1],_フラグ,[32|R2]) :-
        \+(_フラグ = '1'),
        整数部頭部のコード変換(R1,R2).