view sequences/rndscanl.m @ 6:0ce3c2070089

Removed duplicate code and fixed doc in timed_action.
author samer
date Mon, 14 Jan 2013 14:33:37 +0000
parents 3f77126f7b5f
children b1280319413e
line wrap: on
line source
function X=rndscanl(gen,s0,varargin)
% rndscanl - Random scanl 
%
% rndscanl ::
%    (S,A -> rndgen S) ~'random scanner',
%    S                 ~'initial state',
%    seq A, 
%    rndstate                  ~'initial random state'
% -> seq S.

	n=length(varargin)-1;
	rs0=varargin{n+1};
	if n>1,
		X=zipaccum(@zafn,varargin(1:n),{s0,rs0});
	elseif n==1
		X=mapaccum(@mafn,varargin{1},{s0,rs0});
	else
		X=unfoldseq(@ufn,{s0,rs0});
	end

	function [x,s]=ufn(s0)
		setrndstate(s0{2});
		x=gen(s0{1});
		s={x,getrndstate};
	end
	
	function [x,s]=mafn(y,s0)
		setrndstate(s0{2});
		x=gen(s0{1},y);
		s={x,getrndstate};
	end
	
	function [x,s]=zafn(varargin)
		s0=varargin{n+1};
		setrndstate(s0{2});
		x=gen(s0{1},varargin{1:n});
		s={x,getrndstate};
	end
end