2017-10-20 35 views
-1

这种方式实际上有效。但是有没有简单的答案。鉴于本月的第一个月是星期一,请定义一个谓词以在prolog中使用列表中的某个月的任何日期打印日期

dayname(Num,Name) :- 
    member([Num,Name], 
      [[1,'Monday'],[2,'Tuesday'],[3,'Wednesday'],[4,'Thursday'], 
      [5,'Friday'],[6,'Saturday'],[7,'Sunday'],[8,'Monday'], 
      [9,'Tuesday'],[10,'Wednesday'],[11,'Thursday'],[12,'Friday'], 
      [13,'Saturday'],[14,'Sunday'],[15,'Monday'],[16,'Tuesday'], 
      [17,'Wednesday'],[18,'Thursday'],[19,'Friday'],[20,'Saturday'], 
      [21,'Sunday'],[22,'Monday'],[23,'Tuesday'],[24,'Wednesday'], 
      [25,'Thursday'],[26,'Friday'],[27,'Saturday'],[28,'Sunday'], 
      [29,'Monday'],[30,'Tuesday'],[31,'Monday']]). 
+1

听起来像作业... –

回答

1

是的。首先你不需要使用member/2事实。你可以列出这些为事实:

dayname(1,'Monday'). 
dayname(2,'Tuesday'). 
dayname(3,'Wednesday'). 
dayname(4,'Thursday'). 
dayname(5,'Friday'). 
dayname(6,'Saturday'). 
dayname(7,'Sunday'). 

但是现在我们有了,当然没有办法获得'Monday'为8可能是最声明的方式来做到这一点是以下条款:

:- use_module(library(clpfd)). 

dayname(I,D) :- 
    I in 8..31, 
    J #= I-7, 
    dayname(J,D). 

把这个总之,我们得到:

:- use_module(library(clpfd)). 

dayname(1,'Monday'). 
dayname(2,'Tuesday'). 
dayname(3,'Wednesday'). 
dayname(4,'Thursday'). 
dayname(5,'Friday'). 
dayname(6,'Saturday'). 
dayname(7,'Sunday'). 
dayname(I,D) :- 
    I in 8..31, 
    J #= I-7, 
    dayname(J,D). 

然后,我们查询其在所有可能的方式:

?- dayname(I,D). 
I = 1, 
D = 'Monday' ; 
I = 2, 
D = 'Tuesday' ; 
I = 3, 
D = 'Wednesday' ; 
I = 4, 
D = 'Thursday' ; 
I = 5, 
D = 'Friday' ; 
I = 6, 
D = 'Saturday' ; 
I = 7, 
D = 'Sunday' ; 
I = 8, 
D = 'Monday' ; 
I = 9, 
D = 'Tuesday' ; 
I = 10, 
D = 'Wednesday' ; 
I = 11, 
D = 'Thursday' ; 
I = 12, 
D = 'Friday' ; 
I = 13, 
D = 'Saturday' ; 
I = 14, 
D = 'Sunday' ; 
I = 15, 
D = 'Monday' ; 
I = 16, 
D = 'Tuesday' ; 
I = 17, 
D = 'Wednesday' ; 
I = 18, 
D = 'Thursday' ; 
I = 19, 
D = 'Friday' ; 
I = 20, 
D = 'Saturday' ; 
I = 21, 
D = 'Sunday' ; 
I = 22, 
D = 'Monday' ; 
I = 23, 
D = 'Tuesday' ; 
I = 24, 
D = 'Wednesday' ; 
I = 25, 
D = 'Thursday' ; 
I = 26, 
D = 'Friday' ; 
I = 27, 
D = 'Saturday' ; 
I = 28, 
D = 'Sunday' ; 
I = 29, 
D = 'Monday' ; 
I = 30, 
D = 'Tuesday' ; 
I = 31, 
D = 'Wednesday' ; 
false. 

?- dayname(15,D). 
D = 'Monday' ; 
false. 

?- dayname(I,'Thursday'). 
I = 4 ; 
I = 11 ; 
I = 18 ; 
I = 25 ; 
false. 

?- dayname(12,'Thursday'). 
false. 

?- dayname(11,'Thursday'). 
true ; 
false. 
+0

但我需要使用列表功能。 –

+0

@kratos_krom:在这种情况下,我建议你自己做作业:) –

相关问题