2017-10-20 12 views
-1

Cette méthode a effectivement fonctionné. Mais y a-t-il une réponse simplifiée?Étant donné que le premier du mois est un lundi, définissez un prédicat pour imprimer le jour pour n'importe quelle date d'un mois en utilisant la liste en 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

Cela ressemble à des devoirs ... –

Répondre

1

Oui. Tout d'abord vous n'avez pas besoin d'utiliser member/2 pour les faits. Vous pouvez lister ces faits comme:

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

Mais maintenant, nous avons bien sûr aucun moyen d'obtenir 'Monday' pour 8. Probablement le plus déclarative façon de le faire est la clause suivante:

:- use_module(library(clpfd)). 

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

Mettre cette tous ensemble, nous obtenons:

:- 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). 

nous QUERY alors de toutes les manières possibles:

?- 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

mais, j'ai besoin d'utiliser la fonction de liste. –

+0

@kratos_krom: Dans ce cas, je vous suggère de faire vos devoirs :) –