| 1 | |
|---|
| 2 | :- object(date, |
|---|
| 3 | implements(datep)). |
|---|
| 4 | |
|---|
| 5 | |
|---|
| 6 | :- info([ |
|---|
| 7 | version is 1.0, |
|---|
| 8 | authors is 'Paulo Moura', |
|---|
| 9 | date is 2000/7/24, |
|---|
| 10 | comment is 'Date predicates.']). |
|---|
| 11 | |
|---|
| 12 | |
|---|
| 13 | today(Year, Month, Day) :- |
|---|
| 14 | {lgt_current_date(Year, Month, Day)}. |
|---|
| 15 | |
|---|
| 16 | |
|---|
| 17 | leap_year(Year) :- |
|---|
| 18 | (0 is mod(Year, 4), |
|---|
| 19 | \+ 0 is mod(Year, 100) |
|---|
| 20 | ; |
|---|
| 21 | 0 is mod(Year, 400)), |
|---|
| 22 | !. |
|---|
| 23 | |
|---|
| 24 | |
|---|
| 25 | name_of_day(1, 'Sunday', 'Sun'). |
|---|
| 26 | name_of_day(2, 'Monday', 'Mon'). |
|---|
| 27 | name_of_day(3, 'Tuesday', 'Tue'). |
|---|
| 28 | name_of_day(4, 'Wednesday', 'Wed'). |
|---|
| 29 | name_of_day(5, 'Thursday', 'Thu'). |
|---|
| 30 | name_of_day(6, 'Friday', 'Fri'). |
|---|
| 31 | name_of_day(7, 'Saturday', 'Sat'). |
|---|
| 32 | |
|---|
| 33 | |
|---|
| 34 | name_of_month( 1, 'January', 'Jan'). |
|---|
| 35 | name_of_month( 2, 'February', 'Feb'). |
|---|
| 36 | name_of_month( 3, 'March', 'Mar'). |
|---|
| 37 | name_of_month( 4, 'April', 'Apr'). |
|---|
| 38 | name_of_month( 5, 'May', 'May'). |
|---|
| 39 | name_of_month( 6, 'June', 'Jun'). |
|---|
| 40 | name_of_month( 7, 'July', 'Jul'). |
|---|
| 41 | name_of_month( 8, 'August', 'Aug'). |
|---|
| 42 | name_of_month( 9, 'September', 'Sep'). |
|---|
| 43 | name_of_month(10, 'October', 'Oct'). |
|---|
| 44 | name_of_month(11, 'November', 'Nov'). |
|---|
| 45 | name_of_month(12, 'December', 'Dec'). |
|---|
| 46 | |
|---|
| 47 | |
|---|
| 48 | days_in_month( 1, _, 31). |
|---|
| 49 | days_in_month( 2, Year, Days) :- |
|---|
| 50 | leap_year(Year) -> Days = 29; Days = 28. |
|---|
| 51 | days_in_month( 3, _, 31). |
|---|
| 52 | days_in_month( 4, _, 30). |
|---|
| 53 | days_in_month( 5, _, 31). |
|---|
| 54 | days_in_month( 6, _, 30). |
|---|
| 55 | days_in_month( 7, _, 31). |
|---|
| 56 | days_in_month( 8, _, 31). |
|---|
| 57 | days_in_month( 9, _, 30). |
|---|
| 58 | days_in_month(10, _, 31). |
|---|
| 59 | days_in_month(11, _, 30). |
|---|
| 60 | days_in_month(12, _, 31). |
|---|
| 61 | |
|---|
| 62 | |
|---|
| 63 | valid(Year, Month, Day) :- |
|---|
| 64 | integer(Year), |
|---|
| 65 | integer(Month), Month >= 1, Month =< 12, |
|---|
| 66 | integer(Day), |
|---|
| 67 | days_in_month(Month, Year, Days), |
|---|
| 68 | Day >= 1, Day =< Days. |
|---|
| 69 | |
|---|
| 70 | |
|---|
| 71 | :- end_object. |
|---|