このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/625
#  [1] 授業単元:C言語 
#  [2] 問題文:123, 1.23, 1.2.3という数字を入力したとき、 
#         整数、小数、使用できない数字という分類に分けよ。 
#  

'123, 1.23, 1.2.3という数字を入力したとき、整数、小数、使用できない数字という分類に分けよ。'(_整数分類ならび,_小数分類ならび,_使用できない数字分類ならび) :-
        split('123, 1.23, 1.2.3',[',',' '],L),
        '整数、小数、使用できない数字という分類'(L,_整数分類ならび,_小数分類ならび,_使用できない数字分類ならび).

'整数、小数、使用できない数字という分類'([],[],[],[]).
'整数、小数、使用できない数字という分類'([A|R1],[A|R2],R3,R4) :-
        整数である(A),
        '整数、小数、使用できない数字という分類'(R1,R2,R3,R4),!.
'整数、小数、使用できない数字という分類'([A|R1],R2,[A|R3],R4) :-
        小数である(A),
        '整数、小数、使用できない数字という分類'(R1,R2,R3,R4).
'整数、小数、使用できない数字という分類'([A|R1],R2,R3,[A|R4]) :-
        '整数、小数、使用できない数字という分類'(R1,R2,R3,R4),!.

整数である(A) :-
        第一文字が符号で残りの文字列をA2とすると(A,A2),
        文字列が符号を含まない数字だけから構成される(A2),!.
整数である(A) :-
        文字列が符号を含まない数字だけから構成される(A2),!.

小数である(A) :-
        第一文字が符号で残りの文字列をA2とすると(A,A2),
        数字から始まる小数点表現文字列(A2),!.
小数である(A) :-
        数字から始まる小数点表現文字列(A2),!. 

数字から始まる小数点表現文字列(A) :-
        間にピリオドがひとつだけあり他は数字である文字列(A),!.
数字から始まる小数点表現文字列(A) :-
        atom_chars(A,Chars),
        指数部表現が適切(Chars).

指数部表現が適切(Chars) :-
        append(L0,[e,+|R],Chars),
        'L0部の診断'(L0),
        空ではなくかつ全て数字(R).
指数部表現が適切(Chars) :-
        append(L0,[e,-|R],Chars),
        'L0部の診断'(L0),
        空ではなくかつ全て数字(R).

'L0部の診断'(L0) :-
        空ではなくかつ全て数字(L0),!.
'L0部の診断'(L0) :-
        append(L01,['.'|R],L0),
        空ではなくかつ全て数字(L0),
        空ではなくかつ全て数字(R),!.

間にピリオドがひとつだけあり他は数字である文字列(A) :-
        atom_chars(A,Chars),
        append(L0,['.'|R],Chars),
        空ではなくかつ全て数字(L0),
        空ではなくかつ全て数字(R),!.

第一文字が符号で残りの文字列をA2とすると(A,A2) :-
        sub_atom(A,0,1,R,_符号),
        member(_符号,[+,-]),
        sub_atom(A,1,R,0,A2).

文字列が符号を含まない数字だけから構成される(_文字列) :-
        atom_chars(_文字列,Chars),
        空ではなくかつ全て数字(Chars).

空ではなくかつ全て数字([]) :- !,fail.
空ではなくかつ全て数字(L) :-
        全て数字(L).
        
全て数字([]).
全て数字([A|R]) :-
        member(A,['0','1','2','3','4','5','6','7','8','9']),
        全て数字([R]).