このディレクトリの索引
%  http://pc12.2ch.net/test/read.cgi/tech/1232627790/588
% 【    課題    】車、新幹線、飛行機の3つの交通手段を考える。
% 距離と、所要時間の最大限度(許容最長時間)を指定したとき、許容最長時間内に
% 目的地に到着可能で、かつ、費用が一番安い交通手段を調べて表示しなさい。
% ただし、距離(km)と許容最長時間(h) は浮動小数点数としてキーボードから与える。
% 許容最長時間内に到着できる手段がない場合は、「不可能です」と表示する。
% それぞれの時速、料金、利用規定は
% 車 : 60km/h、20 円/km、
% 新幹線 : 200km/h、50 円/km、距離が50km以上のときに利用可能
% 飛行機 : 1000km/h、35 円/km、距離が400km以上のときに利用可能 待機・乗降の合計
% で1 時間にかかるとする。
% 

'車、新幹線、飛行機の3つの交通手段を考える。
距離と、所要時間の最大限度(許容最長時間)を指定したとき、許容最長時間内に
目的地に到着可能で、かつ、費用が一番安い交通手段を調べて表示しなさい。
ただし、距離(km)と許容最長時間(h) は浮動小数点数としてキーボードから与える。
許容最長時間内に到着できる手段がない場合は、「不可能です」と表示する。
それぞれの時速、料金、利用規定は
車 : 60km/h、20 円/km、
新幹線 : 200km/h、50 円/km、距離が50km以上のときに利用可能
飛行機 : 1000km/h、35 円/km、距離が400km以上のときに利用可能 待機・乗降の合計
で1 時間にかかるとする。'(_距離,_許容最長時間,_交通手段) :-
        '許容最長時間内に目的地に到着可能で、かつ、費用が一番安い交通手段'(_距離,_許容最長時間,_交通手段).

'許容最長時間内に目的地に到着可能で、かつ、費用が一番安い交通手段'(_距離,_許容最長時間,_交通手段) :-
        findall([_費用,_交通手段],(
                    許容時間内に到達可能な交通手段の費用(_交通手段,_費用)),
                _候補リスト),
        min(_候補リスト,[_費用,_交通手段]),!.        
'許容最長時間内に目的地に到着可能で、かつ、費用が一番安い交通手段'(_,_,'不可能です').

許容時間内に到達可能な交通手段の費用(_交通手段,_費用) :-
        交通手段(_交通手段),
        許容時間内に到達可能(_交通手段,_距離,_許容最長時間),
        料金(_交通手段,_料金),
        _費用 is _料金 * _距離.

許容時間内に到達可能(_交通手段,_距離,_許容最長時間) :-
        利用規定(_交通手段,_距離),
        時速(_交通手段,_時速),
        付加的な所要時間(_交通手段,_,_付加的な所要時間),
        _到達時間 is (_距離 / _時速) + _付加的な所要時間,
        _到達時間 =< _許容最長時間.

交通手段(車).
交通手段(新幹線).
交通手段(飛行機).

時速(車,60).
時速(新幹線,200).
時速(飛行機,1000).

料金(車,20).
料金(新幹線,50).
料金(飛行機,35).

利用規定(新幹線,_距離) :-
        _距離 >= 50.
利用規定(飛行機,_距離) :-
        _距離 >= 400.
利用規定(車,_距離) :-
        _距離 >= 0.

付加的な所要時間(飛行機,'待機・乗降の合計',1).
付加的な所要時間(車,なし,0).
付加的な所要時間(新幹線,なし,0).