このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/398
#  [1] 授業単元:プログラミング  
#  [2] 問題文(含コード&リンク):  
#  配列・文字列 
#  数字で入力した数を数値に変換するプログラムを作成せよ。  
#  すなわち,入力を文字列"1234"として受け取り,整数に変換し、値1234にする。 
#  負の数-1234にも対応すること。 小数12.34に対応した場合は加点する。  
#  実行結果には、000, 0123や数字以外の文字を含む場合も入れること。  
#  例えば、"12a34"は12に変換してよい。 
#  ※無限ループ、ポインタ等は使用不可 
#  

数字で入力した数を数値に変換する(_文字列,_数値) :-
        atom_codes(_文字列,Codes),
        コードならびを数値に変換する(Codes,_数値).

コードならびを数値に変換する(Codes,_数値) :-
        \+(member(46,Codes)),
        コードならびを整数に変換する(Codes,_数値).
コードならびを数値に変換する(Codes,_数値) :-
        member(46,Codes),
        コードならびを実数に変換する(Codes,_数値).

コードならびを整数に変換する([],0) :- !.
コードならびを整数に変換する([45|R],N) :-
        コードならびを整数に変換する(R,N_1),
        N is N_1 * -1,!.
コードならびを整数に変換する([Code|R],N) :-
        コードならびを整数に変換する(R,N_1),
        N is N_1 * 10 + Code-48.

コードならびを実数に変換する(Codes,_実数) :-
        append(L1,[46|R],Codes),
        コードならびを整数に変換する(L1,N1),
        コードならびを整数に変換する(R,N2),
        実数を構成する(N1,N2,_実数).

実数を構成する(N1,N2,_実数) :-
        N1 < 0,
        '10で割っていく'(N2,N2,V),
        _実数 is N1 - V,!.
実数を構成する(N1,N2,_実数) :-
        N1 >= 0,
        '10で割っていく'(N2,N2,V),
        _実数 is N1 + V,!.

'10で割っていく'(0,V,V) :- !.
'10で割っていく'(N_1,V_1,V) :-
        N_2 is N // 10,
        V_2 is V_1 / 10,
        '10で割っていく'(N_2,V_2,V).