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 回答