我刚刚开始在Prolog中编码,我不能做我想做的事情。 基本上我有2个输入:开始日期“2018/02/14”和持续时间“99天/月”。我想知道在PROLOG中是否有办法预测结束日期:
date(X,Y,Z):-is_a_date(X),is_a_duration(Y),...
主要问题是关于日期格式......
任何提示?
答案 0 :(得分:1)
主要问题是关于日期格式......
Prolog使用术语来建模数据。术语可以是原子或数字,也可以是通过将函子或运算符应用于其他术语而获得的任何复合术语。 /
是运营商。所以2018/02/14
是一个非常好的Prolog术语:
?- Date = 2018/02/14.
Date = 2018/2/14.
这与大多数其他编程语言不同,其中类似上面的内容将是表达式,它将被评估到值 。例如,在Python提示符中输入2018/2/14
会返回72.0714
,因为它认为我们希望它计算一个数字。但是在Prolog中,上面的例子是 not 要求一个数字;它只是说2018/02/14
是一些数据,由三个以/
符号分隔的数字组成。
要对Prolog数据结构进行操作,我们使用统一:
?- Date = 2018/02/14, Date = Year/Month/Day.
Date = 2018/2/14,
Year = 2018,
Month = 2,
Day = 14.
我们将日期与另一个相似的术语Year/Month/Day
统一起来。这里,术语的叶子是变量。统一将这些变量绑定到相应位置的日期条款中的数字。这就是全部!
所以(使用有意义的变量和谓词名称,在Prolog中非常重要),您可以将谓词编写为:
startdate_duration_enddate(Year/Month/Day, Duration, EndDate) :-
... .