Prolog整数比较
大家好,我在Prolog中有一个简单的时钟,它每隔5分钟测量一次时间Prolog整数比较,prolog,logic,Prolog,Logic,大家好,我在Prolog中有一个简单的时钟,它每隔5分钟测量一次时间 nextTime(Hrs:Mins1, Hrs:Mins2) :- nextMins(Mins1, Mins2). nextTime(Hrs1:'55', Hrs2:'00') :- nextHrs(Hrs1, Hrs2). nextHrs('12', '13'). nextHrs('13', '14'). nextHrs('14', '15'). nextHrs('15', '16'). // and so on ne
nextTime(Hrs:Mins1, Hrs:Mins2) :- nextMins(Mins1, Mins2).
nextTime(Hrs1:'55', Hrs2:'00') :- nextHrs(Hrs1, Hrs2).
nextHrs('12', '13').
nextHrs('13', '14').
nextHrs('14', '15').
nextHrs('15', '16'). // and so on
nextMins('00', '05').
nextMins('05', '10').
nextMins('10', '15').
nextMins('15', '20'). // and so on
现在我想写一个谓词,它允许我说时间t2是在时间t1之后还是之前,听起来很简单,但我不知道如何比较谓词中的两个整数
我尝试过这样的事情:
after(H1:M1, H2:M2) :- (H1 < H2).
在(H1:M1,H2:M2)之后:-(H1
或
算术(X,Y):-(X一个有用的Prolog功能,它是“”。然后您可以编写
after(T1, T2) :- T1 @< T2.
(T1,T2)之后的:-T1@
一个有用的序言功能,它是“”。然后您可以编写
after(T1, T2) :- T1 @< T2.
(T1,T2)之后的:-T1@
一个有用的序言功能,它是“”。然后您可以编写
after(T1, T2) :- T1 @< T2.
(T1,T2)之后的:-T1@
一个有用的序言功能,它是“”。然后您可以编写
after(T1, T2) :- T1 @< T2.
(T1,T2)之后的:-T1@
你没有任何整数:你有原子。原子'9'
比原子12
大
只要原子始终是2位小数('09'
而不是'9'
),就可以使用比较/3
:
after(H1:M1,H2,M2) :- compare( '>' , H1:M1 , H2:M2 ) .
on_or_after(H1:M1,H2:M2) :- compare( '>' , H1:M1 , H2:M2 ) .
on_or_after(H1:M1,H2:M2) :- compare( '=' , H1:M1 , H2:M2 ) .
等等
如果您将谓词更改为使用整数而不是原子
nextHrs(12, 13).
nextHrs(13, 14).
nextHrs(14, 15).
nextHrs(15, 16). // and so on
nextMins(00, 05).
nextMins(05, 10).
nextMins(10, 15).
nextMins(15, 20). // and so on
您可以使用并简单地编写如下内容:
compare_time( H1:M1 , H2:M2 , '<' ) :- H1 < H2 .
compare_time( H1:M1 , H1,M2 , '<' ) :- M1 < M2 .
compare_time( HH:MM , HH:MM , '=' ) .
compare_time( H1:M1 , H2:M2 , '>' ) :- H1 > H2 .
compare_time( H1:M1 , H1:M2 , '>' ) :- M1 > M2 .
比较时间(H1:M1,H2:M2,'):-M1>M2。
如果将原子始终保持为2位文本值,仍然可以执行相同的操作,但必须使用算术比较运算符,而不是算术比较运算符
compare_time( H1:M1 , H2:M2 , '<' ) :- H1 @< H2 .
compare_time( H1:M1 , H1,M2 , '<' ) :- M1 @< M2 .
compare_time( HH:MM , HH:MM , '=' ) .
compare_time( H1:M1 , H2:M2 , '>' ) :- H1 @> H2 .
compare_time( H1:M1 , H1:M2 , '>' ) :- M1 @> M2 .
比较时间(H1:M1,H2:M2,'):-M1@>M2。
你没有任何整数:你有原子。原子
'9'
比原子12
大
只要原子始终是2位小数('09'
而不是'9'
),就可以使用比较/3
:
after(H1:M1,H2,M2) :- compare( '>' , H1:M1 , H2:M2 ) .
on_or_after(H1:M1,H2:M2) :- compare( '>' , H1:M1 , H2:M2 ) .
on_or_after(H1:M1,H2:M2) :- compare( '=' , H1:M1 , H2:M2 ) .
等等
如果您将谓词更改为使用整数而不是原子
nextHrs(12, 13).
nextHrs(13, 14).
nextHrs(14, 15).
nextHrs(15, 16). // and so on
nextMins(00, 05).
nextMins(05, 10).
nextMins(10, 15).
nextMins(15, 20). // and so on
您可以使用并简单地编写如下内容:
compare_time( H1:M1 , H2:M2 , '<' ) :- H1 < H2 .
compare_time( H1:M1 , H1,M2 , '<' ) :- M1 < M2 .
compare_time( HH:MM , HH:MM , '=' ) .
compare_time( H1:M1 , H2:M2 , '>' ) :- H1 > H2 .
compare_time( H1:M1 , H1:M2 , '>' ) :- M1 > M2 .
比较时间(H1:M1,H2:M2,'):-M1>M2。
如果将原子始终保持为2位文本值,仍然可以执行相同的操作,但必须使用算术比较运算符,而不是算术比较运算符
compare_time( H1:M1 , H2:M2 , '<' ) :- H1 @< H2 .
compare_time( H1:M1 , H1,M2 , '<' ) :- M1 @< M2 .
compare_time( HH:MM , HH:MM , '=' ) .
compare_time( H1:M1 , H2:M2 , '>' ) :- H1 @> H2 .
compare_time( H1:M1 , H1:M2 , '>' ) :- M1 @> M2 .
比较时间(H1:M1,H2:M2,'):-M1@>M2。
你没有任何整数:你有原子。原子
'9'
比原子12
大
只要原子始终是2位小数('09'
而不是'9'
),就可以使用比较/3
:
after(H1:M1,H2,M2) :- compare( '>' , H1:M1 , H2:M2 ) .
on_or_after(H1:M1,H2:M2) :- compare( '>' , H1:M1 , H2:M2 ) .
on_or_after(H1:M1,H2:M2) :- compare( '=' , H1:M1 , H2:M2 ) .
等等
如果您将谓词更改为使用整数而不是原子
nextHrs(12, 13).
nextHrs(13, 14).
nextHrs(14, 15).
nextHrs(15, 16). // and so on
nextMins(00, 05).
nextMins(05, 10).
nextMins(10, 15).
nextMins(15, 20). // and so on
您可以使用并简单地编写如下内容:
compare_time( H1:M1 , H2:M2 , '<' ) :- H1 < H2 .
compare_time( H1:M1 , H1,M2 , '<' ) :- M1 < M2 .
compare_time( HH:MM , HH:MM , '=' ) .
compare_time( H1:M1 , H2:M2 , '>' ) :- H1 > H2 .
compare_time( H1:M1 , H1:M2 , '>' ) :- M1 > M2 .
比较时间(H1:M1,H2:M2,'):-M1>M2。
如果将原子始终保持为2位文本值,仍然可以执行相同的操作,但必须使用算术比较运算符,而不是算术比较运算符
compare_time( H1:M1 , H2:M2 , '<' ) :- H1 @< H2 .
compare_time( H1:M1 , H1,M2 , '<' ) :- M1 @< M2 .
compare_time( HH:MM , HH:MM , '=' ) .
compare_time( H1:M1 , H2:M2 , '>' ) :- H1 @> H2 .
compare_time( H1:M1 , H1:M2 , '>' ) :- M1 @> M2 .
比较时间(H1:M1,H2:M2,'):-M1@>M2。
你没有任何整数:你有原子。原子
'9'
比原子12
大
只要原子始终是2位小数('09'
而不是'9'
),就可以使用比较/3
:
after(H1:M1,H2,M2) :- compare( '>' , H1:M1 , H2:M2 ) .
on_or_after(H1:M1,H2:M2) :- compare( '>' , H1:M1 , H2:M2 ) .
on_or_after(H1:M1,H2:M2) :- compare( '=' , H1:M1 , H2:M2 ) .
等等
如果您将谓词更改为使用整数而不是原子
nextHrs(12, 13).
nextHrs(13, 14).
nextHrs(14, 15).
nextHrs(15, 16). // and so on
nextMins(00, 05).
nextMins(05, 10).
nextMins(10, 15).
nextMins(15, 20). // and so on
您可以使用并简单地编写如下内容:
compare_time( H1:M1 , H2:M2 , '<' ) :- H1 < H2 .
compare_time( H1:M1 , H1,M2 , '<' ) :- M1 < M2 .
compare_time( HH:MM , HH:MM , '=' ) .
compare_time( H1:M1 , H2:M2 , '>' ) :- H1 > H2 .
compare_time( H1:M1 , H1:M2 , '>' ) :- M1 > M2 .
比较时间(H1:M1,H2:M2,'):-M1>M2。
如果将原子始终保持为2位文本值,仍然可以执行相同的操作,但必须使用算术比较运算符,而不是算术比较运算符
compare_time( H1:M1 , H2:M2 , '<' ) :- H1 @< H2 .
compare_time( H1:M1 , H1,M2 , '<' ) :- M1 @< M2 .
compare_time( HH:MM , HH:MM , '=' ) .
compare_time( H1:M1 , H2:M2 , '>' ) :- H1 @> H2 .
compare_time( H1:M1 , H1:M2 , '>' ) :- M1 @> M2 .
比较时间(H1:M1,H2:M2,'):-M1@>M2。
如果您使用的是
@Nicholas,作为我声明的补充,OP可以在小时和分钟内使用字符串,然后使用T1@
,只要小时和分钟始终保持零填充到两位数(我确信这是他们的意图)。比较,'03':'25'<'13':'20'
将“做正确的事情”。如果您使用@Nicholas,作为我声明的补充,OP可以使用字符串持续数小时和数分钟,然后使用T1@
,只要小时和数分钟始终保持零填充到两位数(我确信这是他们的意图)。比较,'03':'25'@<'13':'20'
将“做正确的事情”。如果您使用@Nicholas,作为我声明的补充,OP可以使用字符串持续数小时和数分钟,然后使用T1@
,只要小时和数分钟始终保持零填充到两位数(我确信这是他们的意图)。比较,'03':'25'@<'13':'20'
将“做正确的事情”。如果您使用@Nicholas,作为我声明的补充,OP可以使用字符串持续数小时和数分钟,然后使用T1@
,只要小时和数分钟始终保持零填充到两位数(我确信这是他们的意图)。比较,'03':'25'@<'13':'20'
将“做正确的事情”。您使用字符串而不仅仅是数字是有原因的吗?如果您使用整数,@capelical显示的解决方案将按需要工作。您使用字符串而不仅仅是数字是有原因的吗?如果您使用整数,@capelical显示的解决方案将按需要工作。您使用字符串f是有原因的吗或者数字而不仅仅是数字?如果您使用整数,@capelical显示的解决方案将按需要工作。您使用字符串而不仅仅是数字有什么原因吗?如果您使用整数,@capelical显示的解决方案将按需要工作。只要时间HH:MM
whereHH
和MM
是整数而不是字符串。所以3:30@13:40.
是假的,但3:30@<13:40.
是真的。@mbrach:也许OP已经意识到了这个问题,因为他发布了带前导零的原子…是的