view sequences/@seq/foldl.m @ 38:9d24b616bb06

Added function algebra.
author samer
date Tue, 29 Jan 2013 15:59:01 +0000
parents beb8a3f4a345
children
line wrap: on
line source
function x=foldl(fn,e,y,varargin)
% foldl - Fold combinator for sequences
%
% This function applies an associative operator to a list of arguments,
% starting from the left using the given starting element.
%
% foldl :: 
%    (X,Y->X)	~'associative binary operator',
%    X         ~'initial element',
%    seq(Y)    ~'a lazy sequence'
% -> X.

if iscell(y), x=cfoldl(fn,e,y); return; end
if nargin<4,
	x=e; 
	while ~isempty(y)
		x=fn(x,head(y));
		y=next(y);
	end
else
	opts=options('quiet',1,varargin{:});
	x=e; 
	while ~isempty(y)
		x=fn(x,head(y));
		y=next(y);
		if ~opts.quiet, fprintf('.'); end
		optpause(opts);
	end
end