[erlang-questions] eep: multiple patterns

Andras Georgy Bekes <>
Tue May 27 15:03:11 CEST 2008


> I agree with Richard O'Keefe that having = as a legal guard 
> test is a Good Thing.
> - if match succeeds it returns true and binds any unbound variables
> - if match fails, it returns false, i.e. it does generate an error
> Then you modify all boolean operations so that if they succeed,
> return true, then any new variables which are bound in them are
> exported, while if they fail, return false, no variables are
> exported.
> - This will work for the whole guard as if the guard fails then no
> variables are exported but the clause is not chosen anyway.
> - No problems with not(...) as it will never export variables.
> - Same with other boolean operators, success implies export. This
> makes checking for variable bindings in and after guards relatively
> easy.
> As far as I can see there are no problems with this.

I think there is a problem. I think I can express a pattern that's 
matching must involve backtracking:

F(A1,A2...) when ({X,_}=A1 or {_,X}=A1) and ({X,_}=A2 ...

So this proposal leads to a language that's too powerful :-(
Just like my very original proposal [1].
The problem with it is discussed [2] through [3].

> Actually thinking about it a bit more if you allow = in guards you
> really don't *need* this multiple pattern feature as you can express
> it as alternate guards.
The "problem" is that this not only makes multiple patterns unnecessary, 
but also the whole "Pattern when Guards" stuff (i.e. the part before 
the 'when' keyword).






More information about the erlang-questions mailing list