samer@0: function X=rndzip(gen,varargin) samer@0: % rndzip - Random sequence by zipping argument sequences samer@0: % samer@0: % rndzip :: samer@0: % (A1, ..., An -> rndgen B) ~'sampling function', samer@0: % seq A1, ..., seq An ~'argument sequences', samer@0: % rndstate ~'initial random state' samer@0: % -> seq B. samer@0: samer@0: n=length(varargin)-1; samer@0: if n>0 samer@25: X=zipaccum(@zipfn,varargin{n+1},varargin{1:n}); samer@0: else samer@23: X=unfold(@ufn,varargin{1}); samer@0: end samer@0: samer@0: function [x,s]=ufn(s0) samer@0: setrndstate(s0); samer@0: x=gen(); samer@0: s=getrndstate; samer@0: end samer@0: samer@0: function [x,s]=zipfn(varargin) samer@0: setrndstate(varargin{n+1}); samer@0: x=gen(varargin{1:n}); samer@0: s=getrndstate; samer@0: end samer@0: end samer@0: samer@0: samer@0: