このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1276810079/198
# ファイルkadai.txt に記述された数行の数値を表す文字列を読み込み、
# 整数に変更して数値として表示するプログラムを作成せよ。
# 関数としてstrtol()を使用すれば問題ないが、同じ機能の関数を作成すること。
# 基数の設定に関する引数は必要なくデフォルト(先頭が0 なら8 進、それ以外は10 進、16 進は使用しない)とする
# 

'ファイルkadai.txt に記述された数行の数値を表す文字列を読み込み、整数に変更して数値として表示する' :-
        get_lines('kadai.txt',_行ならび),
        append(_,[_行文字列|R],_行ならび),
        整数に変更して(_行文字列,_整数),
        write_formatted('%t\n',[_整数]),
        R = [].

整数に変更して(_行文字列,_整数) :-
        sub_atom(_行文字列,0,1,_,'0'),
        atom_codes(_行文字列,Codes),
        reverse(Codes,Codes2),
        反転した基数コードならびから10進数を得る(8,Codes2,_整数),!.
整数に変更して(_行文字列,_整数) :-
        atom_codes(_行文字列,Codes),
        reverse(Codes,Codes2),
        反転した基数コードならびから10進数を得る(10,Codes2,_整数),!.

反転した基数コードならびから10進数を得る(_,[],0) :- !.
反転した基数コードならびから10進数を得る(_基数,[C|R],M) :-
        \+((C >=48,C =< 57)),
        反転した基数コードならびから10進数を得る(_基数,R,M),!.
反転した基数コードならびから10進数を得る(_基数,[C|R],M) :-
        M0 is C - 48,
        反転した基数コードならびから10進数を得る(_基数,R,M2),
        M is M2 * _基数 + M0.