このディレクトリの索引


'BMI個人データの収集' :-
    write('+--------------------------------------+\n'),
    write('| 今から個人データを入力してもらいます |\n'),
    write('+--------------------------------------+\n'), 
    repeat,
    整数項目の取得(入力人数,'入力する人数を設定してください(1〜10)> ',_,nl,_入力人数),
    'BMI個人データの収集'(1,_入力人数),
    write(' 何かキーを押してください '),
    get_line(_キー),
    sub_atom(_キー,0,1,_,q).

'BMI個人データの収集'(N,E) :- N > E,!.
'BMI個人データの収集'(N,E) :-
    'BMI個人データの取得'(N),
    M is N+1,
    'BMI個人データの収集'(M,E),!.
'BMI個人データの収集'(N,E) :- 'BMI個人データの収集'(N,E).

'BMI個人データの取得'(N) :-
    write_formatted('*** %t人目のデータを入力してください ***\n',[N]),
    苗字の取得(_苗字),
    名前の取得(_名前),
    整数項目の取得(年齢,'・年齢を入力してください(整数)> ',_,true,_年齢),
    整数項目の取得(身長,'・身長を入力してください(整数)> ',_,nl,_身長),
    整数項目の取得(体重,'・体重を入力してください(整数)> ',_,nl,_体重),
    'BMI判定'(_身長,_体重,BMI,_判定),  
    個人データの確認(N,_苗字,_名前,_年齢,_身長,_体重,BMI,_判定),
    assertz('BMI個人データ'(_苗字,_名前,_年齢,_身長,_体重,BMI,_判定)).

個人データの確認(N,_苗字,_名前,_年齢,_身長,_体重,BMI,_判定) :-
    write('+++ 個人データを確認します +++\n'),
    write_formatted('[%t人目]\n',[N]),
    write_formatted('苗字: %t\n',[_苗字]),
    write_formatted('名前: %t\n',[_名前]),
    write_formatted('年齢: %t歳\n',[_年齢]),
    write_formatted('身長: %tcm\n',[_身長]),
    write_formatted('体重: %tkg\n',[_体重]),
    write_formatted('BMI : %t [ %t ]\n',[BMI,_判定]),
    nl,!.

'BMI判定'(_身長,_体重,BMI,_判定) :-
    BMI is _体重/_身長/_身長*10000,
    'BMI判定'(BMI,_判定).

'BMI判定'(BMI,やせてます) :- BMI =< 18.5.
'BMI判定'(BMI,普通です) :- BMI > 18.5,BMI < 25.0.
'BMI判定'(BMI,レッツエクササイズ!) :- BMI >= 25.0. 

苗字の取得(_苗字) :-
    write('・苗字を入力してください(半角ローマ字)> '),
    get_line(_苗字).

名前の取得(_名前) :-
    write('・名前を入力してください(半角ローマ字)> '),
    get_line(_名前).

整数項目の取得(_項目名,_入力促進文字列,_入力文字列,_オプション,_値) :-
    write(_入力促進文字列),
    get_line(_入力文字列),
    整数項目の取得_2(_項目名,_入力文字列,_値),
    call(_オプション),!.
整数項目の取得(_項目名,_入力促進文字列,_入力文字列,_オプション,_値) :-
    整数項目の取得(_項目名,_入力促進文字列,_入力文字列,_オプション,_値).

整数項目の取得_2(_項目名,_入力文字列,_値) :- atoi(_入力文字列,_値),!.
整数項目の取得_2(_項目名,_入力文字列,_) :-
    write_formatted('%tの入力[%t]に問題があります\n再入力してください\n',[_項目名,_入力文字列]),
    fail.

atoi(Atom,Integer) :-
    atom(Atom),
    atom_to_chars(Atom,Chars),
    number_to_chars(Integer,Chars),
    integer(Integer),!.

atoi(Atom,Integer) :-
    integer(Integer),
    number_to_chars(Integer,Chars),
    concat_atom(Chars,Atom),!.