[erlang-questions] Charset conversion / stylistic question.

Thomas Lindgren thomasl_erlang@REDACTED
Wed Apr 18 16:07:18 CEST 2007


--- "Ulf Wiger (TN/EAB)" <ulf.wiger@REDACTED>
wrote:

> Thomas Lindgren wrote:
> > 
> > Actually, plain old map/2 isn't tail recursive
> either*.
> 
> How right you are. Apologies.

For everyone's amusement, here is a tail-recursive
map:

map(F, Xs) -> map_tr(F, Xs, []).

map_tr(F, [X|Xs], Acc) -> map_tr(F, Xs, [F(X)|Acc]);
map_tr(F, [], Acc) -> lists:reverse(Acc).

It won't exhaust the process stack unless F/1 does,
but allocates an extra N list cells and incurs an
extra list traversal (N elements). Which perhaps tells
us that tail recursion is not everything.

(Actually, I haven't measured how well map_tr stacks
up against the regular definition. It might surprise
me; if F/1 is substantial work, the extra cost could
become negligible for instance.)

Best,
Thomas

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 



More information about the erlang-questions mailing list