このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1291471791/924
#  [1] 授業単元:C言語 関数  
#  [2] 問題文(含コード&リンク): http://ime.nu/www.dotup.org/uploda/www.dotup.org1330457.txt 
#  
#  8桁までの整数を表わす文字列(例: "-3246") を整数値(例:3246) に変換する関数を作りたい。
#  
#  1. 整数を表わす文字列はつぎの条件を全て同時に満たすと考えられる。
#  (1) 文字列の先頭の文字は、符号を表わす’+’ または’-’ または、数字’0’〜’9’ である
#  (2) 文字列の2 文字目以降は’0’〜’9’ である
#  (3) 符号を除いた文字列の長さは1 以上8 以下である
#  
#  文字列を引数とし、これらの条件を同時に満たす時に整数値1 を、一つでも満たさない時
#  (整数として文字列にエラーがある場合)は0を戻り値として返す関数check() を作れ。
#  
#  2. 変換したい文字列を引数とし、正負を判断して値が正または0 の時には1 を、
#  負の時には-1を、整数として文字列にエラーがある場合には0 を返す関数sign() を作れ。
#  
#  3. 問1, 2 を利用し8 桁までの整数を表わす文字列を引数とし、整数値に変換して返す関数
#  myatoi() を作成せよ


'8 桁までの整数を表わす文字列を引数とし、整数値に変換して返す'(_文字列,_整数値) :-
        '文字列を引数とし、これらの条件を同時に満たす時に整数値1 を、一つでも満たさない時は0を戻り値として返す'(_文字列,_診断値),
        '変換したい文字列を引数とし、正負を判断して値が正または0 の時には1 を、負の時には-1を、整数として文字列にエラーがある場合には0 を返す'(_文字列,_返り値),
        atom_chars(_文字列,Chars),
        '8 桁までの整数を表わす文字列を引数とし、整数値に変換して返す'(Chars,_診断値,_返り値,0,_整数値の一),
        _整数値 is _整数値の一 * _返り値.

'8 桁までの整数を表わす文字列を引数とし、整数値に変換して返す'([A],_診断値,_返り値,Y,X) :-
        文字数値変換(A,N),
        X is 10 * Y + N,!.
'8 桁までの整数を表わす文字列を引数とし、整数値に変換して返す'(['+'|R],_診断値,_返り値,Y,X) :-
        '8 桁までの整数を表わす文字列を引数とし、整数値に変換して返す'(R,_診断値,_返り値,Y,X),!.
'8 桁までの整数を表わす文字列を引数とし、整数値に変換して返す'(['-'|R],_診断値,_返り値,Y,X) :-
        '8 桁までの整数を表わす文字列を引数とし、整数値に変換して返す'(R,_診断値,_返り値,Y,X),!.
'8 桁までの整数を表わす文字列を引数とし、整数値に変換して返す'([A|R],_診断値,_返り値,Y,X) :-
        文字数値変換(A,N),
        Y2 is 10 * Y + N,
        '8 桁までの整数を表わす文字列を引数とし、整数値に変換して返す'(R,_診断値,_返り値,Y2,X).
'文字列を引数とし、これらの条件を同時に満たす時に整数値1 を、一つでも満たさない時は0を戻り値として返す'(_文字列,_診断値) :-
        sub_atom(_文字列,0,1,R,_符号),
        append(_,[_符号|_],['+','-']),
        \+(R = 0),
        count((
                    sub_atom(_文字列,St,1,_,A),
                    St >= 1,
                    \+(文字数値変換(A,_))),0),
        _診断値 = 1,!.
'文字列を引数とし、これらの条件を同時に満たす時に整数値1 を、一つでも満たさない時は0を戻り値として返す'(_文字列,0).

'変換したい文字列を引数とし、正負を判断して値が正または0 の時には1 を、負の時には-1を、整数として文字列にエラーがある場合には0 を返す'(_文字列,-1) :-
        sub_atom(_文字列,0,1,_,'-'),!.
'変換したい文字列を引数とし、正負を判断して値が正または0 の時には1 を、負の時には-1を、整数として文字列にエラーがある場合には0 を返す'(_文字列,1).

文字数値変換('0',0).
文字数値変換('1',1).
文字数値変換('2',2).
文字数値変換('3',3).
文字数値変換('4',4).
文字数値変換('5',5).
文字数値変換('6',6).
文字数値変換('7',7).
文字数値変換('8',8).
文字数値変換('9',9).