このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/438
#  [1] 授業単元:関数  
#  [2] 問題文(含コード&リンク):  
#  1つめの食塩水aグラムは、濃度c%である。 
#  2つめの食塩水bグラムは、濃度d%である。 
#  この2つの食塩水を混ぜると、何%の食塩水が何グラムできるか? 
#  a,b,c,dの値を実数で入力する関数、答えを求める関数を作成し、プログラムを完成させなさい。 
#  実行例) 
#  食塩1:食塩水100g 濃度2% 
#  食塩2:食塩水200g 濃度5% 
#  結果:4%の濃度になる 
#  

'1つめの食塩水aグラムは、濃度c%である'(_a,_c,_塩) :-
       _塩 is _a * _c / 100,!.

'2つめの食塩水bグラムは、濃度d%である'(_b,_d,_塩) :-
       _塩 is _b * _d / 100,!.

'この2つの食塩水を混ぜると、何%の食塩水が何グラムできるか?' :-
        'a,b,c,dの値を実数で入力する'(_a,_b,_c,_d),
        濃度を計算する(_a,_b,_c,_d,_食塩数が何グラム,_濃度),
        writef('結果: %t%%の濃度になる\n',[_濃度]),!.

濃度を計算する(_a,_b,_c,_d,_食塩数が何グラム,_濃度) :-
        '1つめの食塩水aグラムは、濃度c%である'(_a,_c,_塩_1),
        '2つめの食塩水bグラムは、濃度d%である'(_b,_d,_塩_2),
        _食塩水が何グラム is _a + _b,
        _濃度 is (_塩_1 + _塩_2) / (_a + _b) * 100,!.

'a,b,c,dの値を実数で入力する'(_a,_b,_c,_d) :-
        'a,cの値を得る'(_a,_c),
        'b,dの値を得る'(_b,_d).

'a,cの値を得る'(_a,_c) :-
        write('食塩水1: '),
        get_line(Line),
        食塩水と濃度を得る(Line,_a,_c),!.
'a,cの値を得る'(_a,_c) :- 'a,cの値を得る'(_a,_c).

'b,dの値を得る'(_b,_d) :-
        write('食塩水2: '),
        get_line(Line),
        食塩水と濃度を得る(Line,_b,_d),!.
'b,dの値を得る'(_b,_d) :- 'b,dの値を得る'(_b,_d).

食塩水と濃度を得る(Line,X,Y) :-
        split(Line,['食塩数',g,' ',濃度,'%'],[X,Y]),!.
食塩水と濃度を得る(Line,X,Y) :-
        writef('入力された %t から食塩水の重さと濃度が得られません。再入力をお願いします\n',[Line]),
        fail.