Prolog-星期几

sca*_*bie 2 arrays prolog next

我是prolog的新手,真是一团糟。你们能给我一个简单的例子吗,例如..星期几!假设我有一个

day(mon, tue, wed, thu, fri).
Run Code Online (Sandbox Code Playgroud)

我想知道一周中的哪一天(假设开始时将其设置为“星期一”,我什至不知道该怎么做,但我想我可以弄清楚) ,我想将变量设置为“明天”,(例如:如果今天是星期一,我想知道明天是星期二)

我知道这听起来很愚蠢,但是我用过c和java,这对我来说很难。

谢谢!

小智 5

如果您不介意使用库,还可以执行以下操作:

:- use_module(library(clpfd)).

ord_weekday(0, mon).
ord_weekday(1, tue).
ord_weekday(2, wed).
ord_weekday(3, thu).
ord_weekday(4, fri).
ord_weekday(5, sat).
ord_weekday(6, sun).

day_next(D, N) :-
    (X+1) mod 7 #= Y,
    ord_weekday(X, D),
    ord_weekday(Y, N).
Run Code Online (Sandbox Code Playgroud)

首先,我们将0映射到星期一,将1映射到星期二,依此类推;然后,我们将0映射为1、1映射为2,...,6映射为0。

现在您可以像这样查询:

?- day_next(mon, X).
X = tue.

?- day_next(X, mon).
X = sun.
Run Code Online (Sandbox Code Playgroud)

重要的是,您可以将两个参数都保留为自由变量,并枚举所有可能的组合:

?- day_next(D, N).
D = mon, N = tue ;
D = tue, N = wed ;
D = wed, N = thu ;
D = thu, N = fri ;
D = fri, N = sat ;
D = sat, N = sun ;
D = sun, N = mon.
Run Code Online (Sandbox Code Playgroud)

这为您提供与该解决方案完全相同的结果。对于该特殊问题,我希望使用其他解决方案(一周的第二天),但是从此处的示例中可能还需要学习其他内容。