[erlang-questions] DRY principle and the syntax inconsistency in fun vs. vanilla functions

Michael Turner <>
Wed May 18 11:16:27 CEST 2011


I can say

   fun (1)->2;
        (2)->1
   end

but, oddly, I can't define a named function in the analogous way, e.g.:

   factorial
     (1) -> 1;
     (N) -> N*factorial(N-1).

gives me a syntax error. I find the latter more readable than

   factorial(1) -> 1;
   factorial(2) -> N*fact(N-1).

It's also less to type and to read, which is consistent with the DRY
principle ("Don't Repeat Yourself").  And it lends itself to reading a
function definition as a set of cases. I think for Erlang newbies, it should
therefore would be preferred: it helps underscore the pattern-matching style
of Erlang function invocation.

It also looks a *little* bit more like the mathematical convention for
defining these sorts of functions, where you have "f(x) = ", centered
vertically to the left of a big left "{" that (left-)encloses the list of
expression/parameter-condition pairs in a two-column format, e.g.,

 http://cnx.org/content/m29517/latest/Picture%2047.png

So there's a (weak) argument from the Principle of Least Surprise here as
well.

It seems to me that, if anything, this requires only a *simplification* of
the Erlang parser. That leaves only one obvious objection: would any
existing code break if Erlang syntax were altered to allow this?

-michael turner
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20110518/f75cb1ee/attachment.html>


More information about the erlang-questions mailing list