Prolog将事实转换为字符链

时间:2011-02-07 17:37:59

标签: prolog

让我说我有两个事实:

time(3:44).
time(16:28).

我需要找到两者之间的区别。所以我想如果我可以将3:44转换成一个字符链,那么我就可以把列表扔掉,然后把数字拿出去和它们一起工作....

但是我怎样才能将事实3:44改为角色链?

1 个答案:

答案 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测试。