0

次の形式の述語がある場合:

edge(a,b,50).
edge(b,c,70).

speed(am,70).
speed(pm,100).

total(From,To,Time,Duration)時間は午前または午後の時間、期間は旅行の合計距離であると言うことができるプロローグプログラムをどのように書くことができますか?

4

1 に答える 1

1

この結果が

?- 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 で基本的なグラフ ナビゲーションに関する多くの質問を参照してください。

于 2013-05-24T07:22:55.703 に答える