[erlang-questions] List Question

Richard A. O'Keefe ok@REDACTED
Mon Aug 7 23:26:12 CEST 2017

On 8/08/17 12:13 AM, Andrew McIntyre wrote:
> Hello All,
> A Newbie question,
> Can I tell the difference Between a List of Strings and a Single
> String?

Not if it is an empty list.
If it is OK to treat an empty list of strings as
if it were a list containing one empty string,
you can use this:

classify([[_|_]|_]) -> list;
classify([[]|_]   ) -> list;
classify([C|_]    ) when is_integer(C) -> string;
classify([]       ) -> string. % GUESS

> I do not know in advance if its a single string or a list of strings,
> but want to behave differently

In this case you have a poor data structure choice.
You should be passing {string,S} or {string_list,L}
or something like that.  Or you might want to use
binaries instead of character lists.

  - actually return the first element of
> the list when there are multiple values.

In this particular case, it sounds as though

first_string([S|]) when is_list(S) -> S;
first_string(S)    when is_list(S) -> S.

might do.

But seriously, one of the first rules in any Lispy
language, like Lisp, Scheme, Pop-2, Pop-11, Prolog,
or Erlang, is Don't Make Your Data Ambiguous.

It's OK to have a data structure that could, in
a different context, be interpreted differently,
but if you pass something to a function, it is
up to you to make sure the function gets all the
information it needs.

More information about the erlang-questions mailing list