如果我有以下格式的谓词:
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 上有关基本图形导航的许多问题中的任何一个。