[erlang-questions] Re: Correct syntax of a case clause

Raimo Niskanen <>
Tue Jun 16 12:32:59 CEST 2009


On Tue, Jun 16, 2009 at 11:32:39AM +0200, info wrote:
> But we can with the proposed solution:
> 
> case Expr of
> X when X=:=a; X=.=b ->block1;
> c->block2
> end

Note:

> > The question was "is it possible to group two patterns in a case ?"

For patterns it is not possible.

X=:=a; X=:=b are not patterns, they are guard clauses.
With patterns it could be something like this:

case Expr of
    X={ok,A} when is_integer(A) ->
    X={error,B} when is_atom(B) ->
	block1; % Is A or B bound? X should be.
    c ->
	block2
end

Of course that particular example can be done with guard clauses like this:

case Expr of
    X when tuple_size(X)=:=2, element(1,X)=:=ok, is_integer(element(2,X));
           tuple_size(X)=:=2, element(1,X)=:=error, is_atom(element(2,X)) ->
	block1;
    c ->
	block2
end

...but that is practically unreadable compared to the
example that does not compile. And for complex patterns it
becomes hopeless.

> 
> On Mon, Jun 15, 2009 at 07:17:42PM +0200, info wrote:
> > Hi All,
> > 
> > Hey that was my question .... and you wander from my subject !
> > I gave an example but don't try to solve this example !!
> > 
> > case Expr of
> > pattern1 - > do_1;
> > pattern2- > do_2;
> > pattern3 - > do_3;
> > ...
> > end
> > 
> > The question was "is it possible to group two patterns in a case ?"
> 
> No it is not.
> 
:

-- 

/ Raimo Niskanen, Erlang/OTP, Ericsson AB


More information about the erlang-questions mailing list