% output from faster2.pl d(A) :- d(A, B, C). d(leapYear, date(A, B, C, D), date(A, B, C, D)) :- 0 is A mod 4. d(days(A), date(B, C, D, E), date(F, G, H, A)) :- d(days1(C, A), date(B, C, D, E), date(F, G, H, I)). d(days1(sept, 30), A, A). d(days1(apr, 30), A, A). d(days1(jun, 30), A, A). d(days1(nov, 30), A, A). d(days1(feb, 29), date(A, B, C, D), date(A, B, C, D)) :- 0 is A mod 4, !. d(days1(feb, 28), A, A). d(days1(jan, 31), A, A). d(days1(mar, 31), A, A). d(days1(jul, 31), A, A). d(days1(aug, 31), A, A). d(days1(oct, 31), A, A). d(days1(dec, 31), A, A). d(showOff1, date(A, B, C, D), date(A, B, C, E)) :- E is D+1. d(showOff2, date(A, B, C, D), date([b, a], B, C, D)). d(error1, A, B) :- d(badRef, C, 1, A, B). d(showOff3, A, A) :- ( d(date, B, B, A, C), 0 is 10 mod B -> d(date, D, D, C, A), print(D) ; print(boo) ). d(demo1, date(A, B, C, D), date(2000, oct, E, 31)) :- member(E, [16, 17, 18]), F is 31-E, print(F), nl, fail. d(demo1, A, A) :- []. d(demo2, date(A, B, C, D), E) :- d(F, G, G, date(2000, oct, 16, 31), E), print(F=G), nl, fail. d(demo2, A, A) :- []. d(year, A, B, date(A, C, D, E), date(B, C, D, E)). d(month, A, B, date(C, A, D, E), date(C, B, D, E)). d(day, A, B, date(C, D, A, E), date(C, D, B, E)). d(daysThisMonth, A, B, date(C, D, E, A), date(C, D, E, B)). 15 14 13 year=2000 month=oct day=16 daysThisMonth=31