Prolog的英语表达

时间:2017-09-24 05:00:18

标签: prolog

假设我有一个英文表达:

  

日是晚上8点之前和早上8点之后

如果我想在prolog中表达这一点,我可以这样做:

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

2000 = 8pm
800 = 8am

但这不会奏效。是否有更好的方式来表达上述英语表达?

1 个答案:

答案 0 :(得分: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的上限和下限的查询。