All pastes #383888 Raw Edit

Widget Factory

public text v1 · immutable
·published 2007-03-06 17:57 UTC
rendered paste body
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).