このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/883
#  あと、もうひとつ問題 
#  2.201003121(10進数9桁)、性別(男:1、女:2)、年令(未成年:0,成年:1,高齢:2,後期高齢:3)、 
#  職業(無:0、有:1)で個々人が16分類される。それぞれを数字(コード)で入力させ、 
#  その人の状態を一旦ディスプレイに表示し、if文を使って、自然な文章で最後に表示するプログラムを作れ 
# 

'それぞれを数字(コード)で入力させ、その人の状態を一旦ディスプレイに表示し、if文を使って、自然な文章で最後に表示する' :-
        'それぞれを数字(コード)で入力させ'(_個人ID,_分類コード),
        分類コードの生成([_分類コード,_性別,_年齢,_職業],_分類表示),
        writef('%t\n',[_分類表示]),
        自然な文章で最後に表示する(_個人ID,_性別,_年齢,_職業).

'それぞれを数字(コード)で入力させ'(_個人ID,_分類コード) :-
        個人IDの入力(_個人ID),
        分類コードの入力(_分類コード),!.

個人IDの入力(_個人ID) :-
        write('個人IDを入力してください : '),
        get_line(Line),
        個人ID入力診断(Line,_個人ID),!.
個人IDの入力(_個人ID) :-
        個人IDの入力(_個人ID).

個人ID入力診断(Line,_個人ID) :-
        atom_to_term(Line,_個人ID,_),
        integer(_個人ID),
        _個人ID >= 100000000,
        _個人ID =< 999999999,!.
個人ID入力診断(Line,_個人ID) :-
        writef('入力された %t からは適切な個人IDが得られませんでした。再入力をお願いします。\n',[Line]),
        fail.

分類コードの入力(_分類コード) :-
        分類コード表示,
        write('分類コードを入力してください : '),
        get_line(Line),
        分類コード入力診断(Line,_分類コード),!.
分類コードの入力(_分類コード) :-
        分類コードの入力(_分類コード).

分類コード入力診断(Line,_分類コード) :-
        atom_to_term(Line,_分類コード,_),
        integer(_分類コード),
        _分類コード >= 0,
        _分類コード =< 15,!.
分類コード入力診断(Line,_分類コード) :-
        writef('入力された %t からは分類コードが得られませんでした。再入力をお願いします。\n',[Line]),
        fail.

分類コードの生成([_分類コード,_性別,_年齢,_職業],_分類表示) :-
        append(L01,[_性別|_],['男','女']),
        append(L02,[_年齢|_],['未成年','青年','高齢者','後期高齢者']),
        append(L03,[_職業|_],['無','有']),
        length(L01,N1),
        length(L02,N2),
        length(L03,N3),
        _分類コード is N1 * 8 + N2 * 2 + N3,
        concat_atom(['分類コード ',_分類コード,' [','性別:',_性別,'  ','年齢: ',_年齢,'  ','職業: ',_職業,']'],_分類表示).

分類コード表示 :-
        分類コードの生成([_分類コード,_性別,_年齢,_職業],_分類表示),
        writef('%t\n',[_分類表示]),
        fail.
分類コード表示.

自然な文章で最後に表示する(_個人ID,_性別,_年齢,_職業) :-
        writef('個人IDが%tの人は、%tで',[_個人ID,_性別]),
        自然な年齢表現(_年齢),
        自然な職業表現(_職業).

自然な年齢表現(_年齢) :-
        writef('年齢分類は%t、',[_年齢]).

自然な職業表現(有) :-
        write('職業に就いています。\n').
自然な職業表現(無) :-
        write('無職です。\n').