[erlang-questions] In praise of Erlang's 'if'

Anthony Ramine n.oxyde@REDACTED
Thu Aug 21 10:37:13 CEST 2014


Hello Richard,

Then, let’s assume the user wants to finally use guard disjunctions in if clauses:

  if     Green,     Crispy                    -> steam()
   ;     Green, not Crispy                    -> chop()
   ; not Green;               Leafy,   Hard   -> fry(), grill()
   ; not Green,               Leafy, not Hard -> fry(), boil()
   ; not Green,           not Leafy           -> fry(), bake()
  end

Now you have a guard disjunction quite hidden in the middle of a guard, and it’s tolerable only with your nonstandard indentation scheme, because in real life here is what happens:

	https://github.com/tuncer/rebar/commit/2c4d7d1d9bdc2a11d3f485f844500bf4c2aa77a2

Since that design flaw (which is what it is to my eyes) of the Erlang syntax was demonstrated to me, I want guard sequences to be deprecated in ‘if’ clauses’ heads. Or maybe ‘if’ in its entirety, replaced by ‘cond’, if I want to be fancy.

Regards,

-- 
Anthony Ramine

Le 21 août 2014 à 05:21, Richard A. O'Keefe <ok@REDACTED> a écrit :

> Erlang's 'if' is often criticised, so I thought it would
> be nice to show an example where it's just right.
> 
> In connection with the recent thread on Potion,
> I've been re-reading
>    Visual Programming Languages and the
>    Empirical Evidence For and Against
>    K.N.Whitley, October 1996,
>    submitted to the Journal of Visual Languages and Computing.
> 
> Amongst other evidence for visual programming languages, this
> paper cites Scanlan's "Structured flowcharts outperform
> pseudocode: An experimental comparison", IEEE Software, June 1989.
> Scanlan's article is, it seems to me, a classic case of
> claiming too much.  The title suggests, and the text clearly
> states, that 'structured flowcharts' are superior to 'pseudocode',
> where what was established was that one particular form of
> flowchart was superior to one particular form of pseudocode.
> 
> Here's one of the pseudo-code examples:
> 
>   IF GREEN
>      THEN
>         IF CRISPY
>            THEN
>               STEAM
>            ELSE
>               CHOP
>         ENDIF
>      ELSE
>         FRY
>         IF LEAFY
>            THEN
>               IF HARD
>                  THEN
>                     GRILL
>                  ELSE
>                     BOIL
>               ENDIF
>            ELSE
>               BAKE
>         ENDIF
>   ENDIF
> 
> The weird layout is none of my invention.
> Now, suppose we used Erlang as the pseudocode:
> 
> 
> 
>   if     Green,     Crispy                    -> steam()
>    ;     Green, not Crispy                    -> chop()
>    ; not Green,               Leafy,   Hard   -> fry(), grill()
>    ; not Green,               Leafy, not Hard -> fry(), boil()
>    ; not Green,           not Leafy           -> fry(), bake()
>   end
> 
> How do you think the comparison would have come out then?
> 
> There is an old experiment that showed that
>  if X ... ifnot X ... end
> was easier to understand than if X ... else ... end, and
> oddly enough the 'hungry hare' examples in Scanlan appear
> to have been taken from it, without learning its lesson.
> It is at least possible that Scanlan's results were entirely
> due to this factor, not the 'visual' aspect per se.)
> 
> The irony is that an Erlang 'if', laid out the way I've
> laid it out, would in Whitley's paper have been classified
> as a 'visual' notation (subclass 'matrix').
> 
> We could also do it as a 'case':
> 
>   case {Green, Crispy, Leafy, Hard }
>     of {true,  true,   _,     _    } -> steam()
>      ; {true,  false,  _,     _    } -> chop()
>      ; {false, _,      true,  true } -> fry(), grill()
>      ; {false, _,      true,  false} -> fry(), boil()
>      ; {false, _,      false, _    } -> fry(), bake()
>   end
> 
> but in this case I think 'if' is easier to read.
> 
> You might want to object that Scanlan could not have been
> expected to think of this kind of layout in 1986, but this
> is just a 'decision table', and decision tables are much
> older than that and were well known in the 70s.
> 
> What this illustrates above all is that proving that some
> particular language or language feature is better or worse
> than some other can be much harder than you think, and
> that even classic results in the field can collapse under
> a little inspection.
> 
> 
> 
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions




More information about the erlang-questions mailing list