t
является константой в Прологе, так как она начинается со строчной буквы, что означает, что запросы, подобные byCar(X, Y, t).
, не будут выполнены, если в фактах не используется t
, но это не очень вероятно.
Вы должны использовать объединение, чтобы объединить время с переменной, например:
go(X, Y<b>, T</b>):-
byCar(X, Y<b>, T</b>).
travel(X, X, 0).
travel(X, Y<b>, T</b>) :-
go(X, Z<b>, T1</b>),
travel(Z, Y<b>, T2</b>),
T is T1 + T2.
или с аккумулятором:
go(X, Y<b>, T</b>):-
byCar(X, Y<b>, T</b>).
travel(X, Y, T) :-
travel(X, Y, 0, T).
travel(X, X, T, T).
travel(X, Y<b>, T1</b>, T4) :-
go(X, Z<b>, T2</b>),
T3 is T1 + T2,
travel(Z, Y<b>, T3</b>, T4).
Обратите внимание, что в действительности вы следует написать hamilton
с строчными буквами , в противном случае это переменная , что означает, что факт byCar(auckland,Hamilton,103).
говорит о том, что auckland
связан с all города, и каждый раз занимает 103 единицы времени:
byCar(auckland, <b>hamilton</b>, 103).
byCar(hamilton, raglan, 42).