このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1294061094/266
#  問題2 問題1のプログラムを関数を使用たプログラムに改良しなさい。すなわち、キーボードから4つの整数を入力し、その中の最大値を表示するプログラムを、maxof関数を定義して作成しなさい。 
#  ただし、このプログラムは問題3と同様下記の2つの種類の処理を、1つのプログラム内で行うように作成すること。 
#   配列を使わないで、最大値を求める処理(入力用変数:num1,num2,num3,num4) 
#  配列を使わない処理です  
#  num1 = 34  
#  num2 = 21  
#  num3 = 98  
#  num4 = 5  
#  最大値は98です。  
#  配列を使用した処理です  
#  num1 = 34  
#  num2 = 21  
#  num3 = 98  
#  num4 = 5  
#  最大値は98です。 
#  配列を使わない処理です  
#  num1 = 3  
#  num2 = 4  
#  num3 = 5  
#  num4 = 6  
#  最大値は6です。  
#  配列を使用した処理です  
#  num1 = 7  
#  num2 = 8  
#  num3 = 6  
#  num4 = 5  
#  num5 = 4  
#  num6 = 3  
#  num7 = 2  
#  num8 = 3  
#  最大値は8です。    
#  [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C  [4] 期限:1月12日 
# 
# 

'キーボードから4つの整数を入力し、その中の最大値を表示する' :-
        repeat,
        write('ならびを使わない処理です\n'),
        write('num1 = '),get_integer(_整数1),
        write('num2 = '),get_integer(_整数2),
        write('num3 = '),get_integer(_整数3),
        write('num4 = '),get_integer(_整数4),
        maxof(_整数1,_整数2,_整数3,_整数4,_最大値1),
        write_formatted('最大値は%tです\n',[_最大値1]),
        write('ならびを使用した処理です\n'),
        write('num1 = %t\nnum2 = %t\nnum3 = %t\nnum4 = %t\n',[_整数1,_整数2,_整数3,_整数4]),
        maxof([_整数2,_整数3,_整数4],_整数1,_最大値2),
        write_formatted('最大値は%tです\n',[_最大値2]).

maxof([],_最大値,_最大値).
maxof([A|R],_最大値1,_最大値) :-
        A >= _最大値1,
        maxof(R,_最大値2,_最大値),!.
maxof([_|R],_最大値1,_最大値) :-
        maxof(R,_最大値1,_最大値),!.

maxof(_整数1,_整数2,_整数3,_整数4,_最大値) :-
        (    _整数1 >= _整数2,_整数1 = X1;
             _整数1 < _整数2,_整数2 = X1),
        (    _整数3 >= _整数4,_整数3 = X2;
             _整数3 < _整数4,_整数4 = X2),
        (    X1 >= X2,_最大値 = X1;
             X1 < X2,_最大値 = X2),!.