このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1288531658/340
#  [1] 授業単元:C言語 
#   
#  [2] 問題文:以下の課題では、main関数を求めるなど、動作が可能なプログラムにして提出すること。 
#  (1)3つのint型関数の最小値を返す関数を作成しなさい。 
#     プロトタイプは次のようになる。int min3(int x, int y, int z); 
#     キーボードから値を 3つ入力し、これらの関数に引数で値を渡す。関数で処理した結果を表示すること。 
#  (2)2つの整数の和を求める関数及び差を求める関数を作成しなさい。 
#    プロトタイプは次のようになる。 
#     int sum(int x, int y); 
#     int diff(int x, int y); 
#   
#    キーボードから値を2つ入力し、これらの関数に引数で値を渡す。関数で処理した結果を表すこと。 
#   
#  

'3つのint型関数の最小値を返す' :-
        '3つのint型数を得る'(_x,_y,_z),
        min3(_x,_y,_z,Min3),
        write_formatted('入力された3つの数 %t %t %t の最小値は %t です。\n',[_x,_y,_z,Min3]).

min3(_x,_y,_z,Min3) :-
        length(Lx,_x),
        length(Ly,_y),
        length(Lz,_z),
        append(Lx,_,Lz),
        append(Lx,_,Ly),
        length(Lx,Min3),!.
min3(_x,_y,_z,Min3) :-
        min3(_y,_z,_x,Min3),!.
min3(_x,_y,_z,Min3) :-
        min3(_z,_x,_y,Min3),!.

'2つの整数の和を求める' :-
        '2つの整数を得る'(_x,_y),
        sum(_x,_y,_z),
        write_formatted('和は %t\n',[_z]).

sum(_x,_y,_z) :-
        \+(var(_x)),
        \+(var(_y)),
        length(Lx,_x),
        length(Ly,_y),
        append(Lx,Ly,Lz),
        length(Lz,_z),!.
sum(_x,_y,_z) :-
        \+(var(_x)),
        \+(var(_z)),
        length(Lx,_x),
        length(Lz,_z),
        append(Lx,Ly,Lz),
        length(Ly,_y),!.
sum(_x,_y,_z) :-
        \+(var(_y)),
        \+(var(_z)),
        length(Ly,_y),
        length(Lz,_z),
        append(Lx,Ly,Lz),
        length(Lx,_x),!.

diff(_x,_y,_z) :-
        \+(var(_x)),
        \+(var(_y)),
        length(Lx,_x),
        length(Ly,_y),
        append(Ly,Lz,Lx),
        length(Lz,_z).

'2つの整数を得る'(_x,_y) :-
        write('2つの整数をカンマ区切りで一行で入力してください : '),
        get_line(Line),
        '2つの整数を得るための診断'(Line,_x,_y),!.
'2つの整数を得る'(_x,_y) :-
        '2つの整数を得る'(_x,_y).

'2つの整数を得るための診断'(Line,_x,_y) :-
        split(Line,[','],[_x,_y]),
        integer(_x),
        integer(_y),!.
'2つの整数を得るための診断'(Line,_x,_y) :-
        write_formatted('入力された %t からは2つの整数を得られません\n再入力をお願いします\n',[Line]),
        fail.

'3つのint型数を得る'(_x,_y,_z) :-
        write('3つのint型数をカンマ区切りで一行で入力してください : '),
        get_line(Line),
        '3つのint型数を得るための診断'(Line,_x,_y,_z),!.
'3つのint型数を得る'(_x,_y,_z) :-
        '3つのint型数を得る'(_x,_y,_z).

'3つのint型数を得るための診断'(Line,_x,_y,_z) :-
        split(Line,[','],[_x,_y,_z]),
        integer(_x),
        integer(_y),
        integer(_z),!.
'3つのint型数を得るための診断'(Line,_x,_y,_z) :-
        write_formatted('入力された %t からは3つint型数を得られません\n再入力をお願いします\n',[Line]),
        fail.