widget(W,D) :- member(D,[3,4,5,6,7,8,9]).
worker(DaysWorked,[],DaysWorked).
worker(DaysWorked, [W,C,D |WidgetL], Total) :-
widget(W,D),
DaysSpentOnW is C * D,
T1 is Total + DaysSpentOnW,
worker(DaysWorked,WidgetL,T1).
factory([]).
factory([ [DW|WL] | WidgetL]) :- worker(DW,WL,0), factory(WidgetL).
day(mon,1). day(tue,2). day(wed,3). day(thu,4).
day(fri,5). day(sat,6). day(sun,7).
fixmod(M,N) :- M < 0, N is (M + 7).
fixmod(M,N) :- M >= 0, N is M.
daymod(D1,D2,N) :- day(D1,J), day(D2,K), M is (K-J+1) mod 7, fixmod(M,N).
mworker(DaysWorkedMod,[],DaysWorked) :- DaysWorkedMod is DaysWorked mod 7.
mworker(DaysWorkedMod, [W,C,D |WidgetL], Total) :-
widget(W,D),
DaysSpentOnW is C * D,
T1 is Total + DaysSpentOnW,
mworker(DaysWorkedMod,WidgetL,T1).
mfactory([]).
mfactory([ [SD, ED |WL] | WidgetL]) :- daymod(SD,ED,DW), mworker(DW,WL,0), mfactory(WidgetL).