widget(W,D) :- member(D,[3,4,5,6,7,8,9]). 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).