view sequences/@seq/foldl.m @ 13:03694e5c8365

Reorganised some high order list functions to correct class-based method dispatch; fixed some docs.
author samer
date Wed, 16 Jan 2013 12:12:34 +0000
parents 3f77126f7b5f
children beb8a3f4a345
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=prefs('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