2017-09-24 39 views
1

让说我有一个英文表达,说:英文解释,以Prolog的

日是晚上8点前,上午8点

后,如果我想在序言中表示这是我可以做这样的事情:

day(X) :- X<=2000,X>=800.  

2000 = 8pm 
800 = 8am 

但这不会工作。有没有更好的方式来表达上述英语表达?

回答

0

首先在Prolog中较小的等于运算符是=<而不是<=。此外,上述代码不起作用,因为运营商=已被使用。如果你要实现的目标是约束晚上8点与价值2000等一个简单的方法是使窗体的事实:

fact(2000, 8-pm). 
fact(800, 8-am). 

,并用它喜欢:

day(X) :- fact(Y,8-pm),fact(Z,8-am),X=<Y,X>=Z. 

例子:

?- day(500). 
false. 

?- day(900). 
true ; 
false. 

注意上面不查询,如day(X)期待回答上,工作下限X的

+0

我会在夜间做同样的事吗?假设我想说的是,晚上在晚上9点之后,但是在凌晨4点之前 –

+0

是的,当然,但你应该在晚上9点和凌晨4点用数字匹配...注意,如果你在晚上9点和N1号一起,凌晨4点用N2,那么[N1,N2 ]和[800,2000]不应该重叠,以便日夜不同。 – coder