Если ваши факты для time/1
написаны точно , как вы показали выше, тогда они содержат термины, составленные с ':'/2
, так что, если вы выполнили следующее, вы получите:
?- time(H:M).
H = 3,
M = 44 ;
H = 16,
M = 28.
Как видите, вы можете легко извлечь часы (H
) и минуты (M
) для каждого time/1
факта, используя сопоставление с образцом, как показано. Используя эту технику, вы можете попытаться вставить свои значения в следующее (например, это всего лишь предложение; оно может работать не так, как вы хотите, но вы должны понять основную идею):
duration_between(H1:M1, H2:M2, H3:M3) :-
MinsDiff is abs((M2 - M1) + ((H2 - H1) * 60)), % minutes btw H2:M2 and H1:M1
H3 is floor(MinsDiff / 60),
M3 is MinsDiff mod 60.
Выполнение этого, например, дает:
?- duration_between(3:44, 16:28, H:M).
H = 12,
M = 44.
Протестировано с SWI-Prolog.