[erlang-questions] Strings as Lists

Lev Walkin vlm@REDACTED
Fri Feb 15 21:45:45 CET 2008


David Mercer wrote:
> Out of curiosity, besides as an academic exercise and a point of debate,
> what is the practical use of reversing a string?  I've been programming for
> a quarter century and am having trouble remembering when I last needed to
> reverse a string.  Search? yes; compare? yes; substitute? yes; modify? yes.
> Just can't think of when I've needed to reverse a string.  Is there some
> common protocol that requires you to send Unicode strings in reverse order
> or something?


When you need to do a manipulation on string in constant length,
you need reverse. For example, to_upper() can be implemented as

to_upper(L) = foldr(fun(C, A) -> [char_upper(C) | A] end, [], L).

or

to_upper(L) = map(fun char_upper/1, L).

of which both both have O(n) space requirement, or via

	to_upper(L) = lists:reverse(to_upper(L, []))
	to_upper([], Acc) -> Acc;
	to_upper([C|T], Acc) -> to_upper(T, [char_upper(T)|Acc]).

which is O(n) in space.

Both are O(n) in time, though with different coefficients.

-- 
Lev Walkin
vlm@REDACTED



More information about the erlang-questions mailing list