[erlang-questions] Guards syntax for multiple values
Mon Mar 25 16:50:46 CET 2019
On 3/25/19 9:00 AM, Florent Gallaire wrote:
> Yes excuse me for my wrong sentence. I was talking about
> lists:member/2 in a guard:
> is_fraction(X) when lists:member(X, "½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒") -> true.
> which is not possible.
The set of valid guard expressions (sometimes called guard tests) is
a subset of the set of valid Erlang expressions. The reason for
restricting the set of valid expressions is that evaluation of a
guard expression must be guaranteed to be free of side
effects. Valid guard expressions are the following:
and later on, there's a list of "blessed" functions that are allowed in
My experience with Erlang is entirely as a hobbyist, but what are the
pros, cons, and possibilities of expanding the list of such "blessed"
functions? Many of the functions in the list module have no side
effects, and could make some Erlang code more concise.
That said, I've also discovered (or more likely rediscovered) that
breaking down such functions and guard clauses one more layer also leads
to more concise code. I don't know Florent's use case, but I could
imagine breaking it down one more level into something like this:
Classification = classify(X),
process(X, fraction) ->
%% process fractions here
process(X, url_character) ->
%% process URL characters here
process(X, whitespace) ->
%% process whitespace here
process(X, UnknownClassification) ->
%% handle an unknown X here
Or maybe all that does is push the problem into the implementation
More information about the erlang-questions