Prolog 中的条件语句
Conditionals in Prolog
我有谓词 monthyear
如果下面没有提供月份和年份,则 return 是当前月份。
monthyear(M,Y) :-
get_time(Stamp),
stamp_date_time(Stamp, DateTime, local),
date_time_value(month, DateTime, M),
date_time_value(year, DateTime, Y).
如果提供了月份和年份 return 提供了月份和年份。
为此,我在下面编写了以下代码。
cal(X,Y,Z1,Z2):-
Z1 is X,
Z2 is Y.
cal(X,Y,Z1,Z2):-
X == null,
Y == null,
monthyear(Z1,Z2).
不过我确信这段代码可以改进,我也遇到了错误
ERROR: is/2: Arguments are not sufficiently instantiated
我怎样才能完成这项工作?
X=1,Y=2,cal(X,Y,Z1,Z2).
returns
Z1 = X
Z2 = Y
和
cal(X,Y,Z1,Z2).
returns
Z1 = 1,
Z2 = 2016
您可以使用两个版本的 cal
:
cal(X,Y,Z1,Z2):-
Z1 is X,
Z2 is Y.
cal(Z1,Z2):-
monthyear(Z1,Z2).
如果你调用 cal(2, 2015, Z1, Z2)
你会得到
Z1 = 2,
Z2 = 2015.
如果您致电 cal(Z1, Z2)
,您将获得(今天)
Z1 = 1,
Z2 = 2016.
我有谓词 monthyear
如果下面没有提供月份和年份,则 return 是当前月份。
monthyear(M,Y) :-
get_time(Stamp),
stamp_date_time(Stamp, DateTime, local),
date_time_value(month, DateTime, M),
date_time_value(year, DateTime, Y).
如果提供了月份和年份 return 提供了月份和年份。 为此,我在下面编写了以下代码。
cal(X,Y,Z1,Z2):-
Z1 is X,
Z2 is Y.
cal(X,Y,Z1,Z2):-
X == null,
Y == null,
monthyear(Z1,Z2).
不过我确信这段代码可以改进,我也遇到了错误
ERROR: is/2: Arguments are not sufficiently instantiated
我怎样才能完成这项工作?
X=1,Y=2,cal(X,Y,Z1,Z2).
returns
Z1 = X
Z2 = Y
和
cal(X,Y,Z1,Z2).
returns
Z1 = 1,
Z2 = 2016
您可以使用两个版本的 cal
:
cal(X,Y,Z1,Z2):-
Z1 is X,
Z2 is Y.
cal(Z1,Z2):-
monthyear(Z1,Z2).
如果你调用 cal(2, 2015, Z1, Z2)
你会得到
Z1 = 2,
Z2 = 2015.
如果您致电 cal(Z1, Z2)
,您将获得(今天)
Z1 = 1,
Z2 = 2016.