% $Id: BufferDD.oz,v 1.1 2007/10/31 21:45:08 leavens Exp leavens $ %% Figure 4.14 from CTM declare %% Buffer puts its demands on Xs %% and outputs results to Ys proc {BufferDD N ?Xs Ys} fun {Startup N ?Xs} if N == 0 then Xs else Xr in Xs=_|Xr {Startup N-1 Xr} end end %% AskLoop gets demands from Ys and %% transfers them to demands on Xs proc {AskLoop Ys ?Xs ?End} case Ys of Y|Yr then Xr End2 in Xs = Y|Xr % Get from buffer End=_|End2 % Replenish buffer {AskLoop Yr Xr End2} end end End = {Startup N Xs} in {AskLoop Ys Xs End} end