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

Parnell Springmeyer <>
Wed May 18 17:11:27 CEST 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

You're being pedantic dude. I'm sure Joe Armstrong and the other
programmers that designed and work on Erlang are acutely aware of DRY,
PoLS, and a whole bunch of others.

Personally, I think it is a feature to state the function name when
defining another function clause.

    some_func(X, Y) ->
        %% Long bit of code
        ...;
    some_func(X, []) ->
        %% More code
        ....

Without it, scanning the source could get confusing.

Michael Turner <> writes:

> 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
>
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions

- -- 
Parnell "ixmatus" Springmeyer (http://ixmat.us)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
Comment: GPGTools - http://gpgtools.org

iQEcBAEBAgAGBQJN0+GfAAoJEPvtlbpI1POLEMkH/3TKrH5uCapUy+jM2V7+JP43
Fn8EEJIgkuGHd+t1Jp2BI190Yyl+hO1hlarQJzDulGWBdYMtsxIGJ32Za9rJrSyo
C+nzfDpC5cKrLXXlk4vFq+GphnKOoOffQ7FCqQvElL89GBXxt7cvPCjk6X04BuYI
MhQYidxOozerdvNkH1iw9uC61zVhz0ahPqwuMbyzCg71BjLYo8NR+qYpqtiTMHjx
nXar6vcjzsrEQzi5Ul5hWjrgzQQgecFOeeZ5bQjTzhKfHMpUk1beI5rQuYxpuvVd
8kA1YiOU5mfQqoqA+ZKpoG598Isp1vnTc+DQznJC9GbE4mgUWNO5n4J51U2OR5U=
=ypYB
-----END PGP SIGNATURE-----



More information about the erlang-questions mailing list