[erlang-questions] Strings as Lists

Richard A. O'Keefe ok@REDACTED
Thu Feb 14 02:28:38 CET 2008


On 13 Feb 2008, at 7:21 am, Christian S wrote:
> That is the reason. Hysterical Raisins.
>
> There was a time when Erlang didn't have binaries.

There was a time when Erlang didn't have _anything_,
but that's almost surely not the reason.

> Someone thought it
> would be a good idea to make "ABC" a way to write [65,66,67].

Don't forget, Erlang was heavily influenced by Prolog and Strand84.
If memory serves me correctly, the original prototype implementation
was done in Prolog, and the Prolog reader has read "ABC" as [65,66,67]
since the late 1970s at least.

It's not Hysterical Raisins at all: it is simplicity (the preferred
sequence type in Erlang is lists, and strings are just sequences of
characters), power (because any time someone defines a function on
lists you get to use it on strings, and there are *lots* of useful
list functions), and processing efficiency (because working down
one character at a time doesn't require allocating *any* new storage,
not even for slices).

ByteStrings were added to Haskell (actually in two flavours) to support
high volume I/O.  One of the reasons they've seen a lot of acceptance is
that various people have gone to a lot of trouble to make them LOOK as
much like lists as possible.  Thanks to Haskell's typeclass machinery,
that can be "very much indeed" (see the ListLike package, the use of  
which
means that you can continue to write code that works on lists *or*  
strings).
The one thing that bytestrings aren't much good for these days, of  
course,
is holding *decoded* characters.


It's important to realise that in ANY programming language there is  
more than
one way to represent strings.  For example, even for character=byte  
there are
three different representations supported in C89, and C89 programs  
often had
to deal with a fourth.  You don't *have* to stick with the one that the
compiler translates "ABC" to.






More information about the erlang-questions mailing list