% fastereg2.pl

% define named accessors to a term with
% four arguments (defined using capsule)
d=date(year,month,day,daysThisMonth).

% define predicates that query and update
% arguements in the date term

% top-level driver
d(X) :- d(X,_,_).

% does the work
d`leapYear -->
	0 is ?year mod 4.
d`days(D) -->
	?month=M,
	`days1(M,D),
	!daysThisMonth=D.
d`days1(sept,30).
d`days1(apr,30).
d`days1(jun,30).
d`days1(nov,30).
d`days1(feb,29) -->
	`leapYear,!.
d`days1(feb,28).
d`days1(jan,31).
d`days1(mar,31).
d`days1(jul,31).
d`days1(aug,31).
d`days1(oct,31).
d`days1(dec,31).
d`showOff1 -->
	!daysThisMonth is ?daysThisMonth + 1.
d`showOff2 -->
	!year = [],
	!year = [a|?year],
	!year = [b|?year],
	!year = [c|?year],
	?year = [_|T],
	!year = T.

d`error1 --> !badRef = 1.
d`showOff3 -->
	0 is 10 mod ?date
        -> print(?date)
        ;  print(boo). 

d`demo1 -->
	!year = 2000,
	!month= oct,
	member(!day,[16,17,18]),
	`days(D),
	ToGo is D - ?day,
	print(ToGo),
	nl,
	fail.
d`demo1 --> [].

d`demo2 -->
	!year = 2000,
	!month= oct,
	!day=16,
	`days(_),
	?A=B,
	print(A=B),
	nl,
	fail.
d`demo2 --> [].



