让我说我有两个事实:
time(3:44).
time(16:28).
我需要找到两者之间的区别。所以我想如果我可以将3:44转换成一个字符链,那么我就可以把列表扔掉,然后把数字拿出去和它们一起工作....
但是我怎样才能将事实3:44改为角色链?
答案 0 :(得分:1)
如果上面显示的time/1
的事实正好,则它们包含使用':'/2
构造的术语,这样,如果您执行了以下操作,你会得到:
?- time(H:M).
H = 3,
M = 44 ;
H = 16,
M = 28.
如您所见,您可以使用模式匹配轻松提取每个H
事实的小时数(M
)和分钟数(time/1
),如图所示。使用这种技术,你可以尝试将你的值插入以下(n.b.,这只是一个建议;它可能不会按你想要的方式工作,但你应该得到基本的想法):
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测试。