[erlang-questions] guard expression restriction

Hynek Vychodil <>
Fri Dec 3 11:20:44 CET 2010


On Fri, Dec 3, 2010 at 3:44 AM, Jeff Schultz <> wrote:
> On Thu, Dec 02, 2010 at 10:37:55AM +0200, Kostis Sagonas wrote:
>> Hmmm... In any case, the paper I mentioned in my previous mail contains an
>> example of more clear and succinct code when user-defined guards are
>> allowed.
>
> I'm pretty sure I wouldn't write your Figure 7 that way in anything
> other than short-lived code that I planned to throw away.*
>
> Transcribed, it's more or less
>
>    foo2(Set) when gb_sets:is_set(Set) ->
>        handlegbset(Set);
>    foo2(Set) when sets:is_set(Set) ->
>        handleset(Set);
>    foo2(_) ->
>        error.
>
> This puts my code at the mercy of data-representation changes in
> either referenced module that I have no control over.  (In fact,
> gb_sets:is_set is explicitly "Not Recommended" in its documentation.)
>
> I'd be much more likely to write something like
>
>    -record(agg, {kind=error, set=error}).
>
>    % Code to generate various kinds of #agg and pack them correctly
>    % into the record . . . .
>
>    foo3(Agg) when Agg#agg.kind =:= gb_set ->
>        handlegbset(Agg);
>    foo3(Agg) when Agg#agg.kind =:= set ->
>        handleset(Agg);
>    foo3(_) ->
>        error.
>

Even better but point taken

foo3(#agg{kind = gb_set } = Agg) ->
     handlegbset(Agg);
foo3(#agg{kind = set      } = Agg) ->
      handleset(Agg);
foo3(_) ->
      error.


> I can maintain this, and I'm safe from changes in someone else's
> datastructures that might make one kind of collection look like
> another.
>
>
>    Jeff Schultz
>
>
> -----------------------------------------------------
> *Of course, it's often the code you were most certain
> to throw away that lives the longest :-(
>
> ________________________________________________________________
> erlang-questions (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:
>
>



-- 
--Hynek (Pichi) Vychodil

Analyze your data in minutes. Share your insights instantly. Thrill
your boss.  Be a data hero!
Try GoodData now for free: www.gooddata.com


More information about the erlang-questions mailing list