次の形式の述語がある場合:
edge(a,b,50).
edge(b,c,70).
speed(am,70).
speed(pm,100).
total(From,To,Time,Duration)
時間は午前または午後の時間、期間は旅行の合計距離であると言うことができるプロローグプログラムをどのように書くことができますか?
この結果が
?- total(a,c,Time,Tot).
Time = am,
Tot = 1.7142857142857142 ;
Time = pm,
Tot = 1.2 ;
false.
あなたはそれを得ることができます
total(From,To,Time,Duration) :-
distance(From, To, Distance),
speed(Time, Speed),
Duration is Distance / Speed.
distance(From, To, Distance) :-
edge(From, To, Distance).
distance(From, To, Distance) :-
edge(From, T, DistA),
distance(T, To, DistB),
Distance is DistA + DistB.
edge/3 グラフにはサイクルがあってはならないことに注意してください。それ以外の場合は、ここ SO で基本的なグラフ ナビゲーションに関する多くの質問を参照してください。