[erlang-questions] Ideas for a new Erlang

Sven-Olof Nystr|m <>
Sat Jun 28 11:17:36 CEST 2008

Robert Virding writes:
 > On 26/06/2008, Richard A. O'Keefe <> wrote:
 > > p6. "The complex selective receive primitive of old Erlang
 > >       has forced the Erlang designers to introduce a more
 > >       restricted type of expressions called _guards_."
 > >
 > > This is fiction, and it's fiction with a major error in it.
 > >
 > > Guards are *NOT* a restricted type of expression.
 > Richard is absolutely right here. Guards were always seen as part of
 > pattern matching, the bits which you could not easily write in the
 > patterns. They have always been a sequence of *tests* which either
 > succeed of fail, there has never been a concept of error in guards. In
 > this sense they have never been proper expressions, even restricted
 > ones. Boolean operations were added to expand guards and tests the
 > changed to more resemble expressions, for example tuple(T) =>
 > is_tuple(T), but guard tests are not expressions, they are *tests*.

As I already explained in my reply to Richard, I meant expressions in
a general sense.

Expressions in C or C++ are expressions. So are expressions in Java,
Common Lisp and most other programming languages. Even regular
expressions are expressions. Can you give a definition of the concept
"expression" that excludes guard tests of Erlang and includes all
other types of expressions?

 > It might have been the wrong to expand the tests with boolean
 > operations as it means that it is more difficult to see the
 > difference, and hence to understand it.
 > But they are not expressions, they never have been, they are tests!

What I really wanted to say was that guard tests of Erlang are strange
and unusual. I see nothing in your posting that contradicts that.

 > Robert
 > P.S. I have seen attempts, not in Erlang, to include the "guard" bit
 > in the patterns and they were *very* hard to read.

Not sure what that means.


More information about the erlang-questions mailing list