このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/189
#  1] 授業単元:プログラミング演習  
#  [2] 問題文:  
#  http://ime.nu/codepad.org/kGj9u7Sm 
#  #include 
#  typedef int (*f)(int);
#  int charge1(int x)
#  {
#      return 3000 + 1200 * x;
#  }
#  int charge2(int x)
#  {
#      return 5000 + 600 * x;
#  }
#  int charge3(int x)
#  {
#      return 7000 + 300 * x;
#  }
#  int main(void)
#  {
#  f func[] = { charge1, charge2, charge3 };
#  int hour, i;
#  for (hour = 1; hour <= 10; hour++) {
#  printf("%d時間利用の場合\n", hour);
#  for (i = 0; i < 3; i++) {
#  printf("サービス%d:%d円\n", i + 1, func[i](hour));
#  }
#  putchar('\n');
#  }
#  return 0;
#  }
#   
#  利用時間x分を入力すると、上記にあるプログラムのサービスのうち、最も安いサービスの名称とその料金を計算し出力するプログラムを関数charge1、 charge2、 charge3を利用して作成しなさい。 
#  

charge1(_x,_charge) :-
        _charge is 3000 + 1200 * _x.

charge2(_x,_charge) :-
        _charge is 5000 + 600 * _x.

charge3(_x,_charge) :-
        _charge is 7000 + 300 * _x.

'利用時間x時間を入力すると、上記にあるプログラムのサービスのうち、最も安いサービスの名称とその料金を計算し出力するプログラムを関数charge1、 charge2、 charge3を利用して作成しなさい。'(_x,_サービス名,_最小charge) :-
        利用時間x時間を入力すると(_x),
        '上記にあるプログラムのサービスのうち、最も安いサービスの名称とその料金を計算し'(_x,_最も安いサービスの名称,_料金),
        出力する(_x,_料金,_最も安いサービスの名称).

利用時間x時間を入力すると(_x) :-
        write('利用時間x時間を入力してください : '),
        get_line(Line),
        利用時間x時間の入力診断(Line,_x),!.
利用時間x時間を入力すると(_x) :-
        利用時間x時間を入力すると(_x).

利用時間x時間の入力診断(Line,_x) :-
        atom_to_term(Line,_x,_),
        integer(_x),
        _x >= 0,!.
利用時間x時間の入力診断(Line,_x) :-
        writef('入力された %t からは適切な利用時間が得られませんでした。再入力をお願いします。\n',[Line]),
        fail.

'上記にあるプログラムのサービスのうち、最も安いサービスの名称とその料金を計算し'(_x,_最も安いサービスの名称,_料金) :-
        charge1(_x,_charge1),
        charge2(_x,_charge2),
        charge3(_x,_charge3),
        findmin([_charge,_サービス名],(
                    member([_charge,_サービス名],[[_charge1,charge1],[_charge2,charge2],[_charge3,charge3]])),
                [_料金,_最も安いサービスの名称]).

出力する(_x,_料金,_最も安いサービスの名称) :-
        writef('%t時間 %t円 %t\n',[_x,_料金,_最も安いサービスの名称]).