[erlang-questions] Erlang and syntax.

Richard A. O'Keefe ok@REDACTED
Sun Feb 23 22:35:22 CET 2014


On 23/02/2014, at 12:58 AM, Vlad Dumitrescu wrote:
> On 22 Feb 2014 12:43, "Anthony Ramine" <n.oxyde@REDACTED> wrote:
> >
> > Erlang is made to be boring. Boring means that it needs to be brain dead easy to comprehend. Brain dead easy means no macros.
> 
> Sorry, but -define () macros can be just as confusing as lispy ones... I would gladly trade them away.

Don't forget: Erlang had been around and useful for some time
before the preprocessor was added.

I used to love the Lisp family.
But it's not the only functional syntax.
There are functional languages that make Perl look beautiful
(O'CAML and F#: I'm thinking of you).
There's SML, which would be pretty neat if it had list
comprehensions.  (Hello, SML?  This is the 21st century
calling!  We have something like list comprehensions in C#.
Isn't it about time you caught up?)
There's Haskell and Clean.
Compare

   ;; Scheme

   (define (dot Xs Ys)
      (let loop ((Xs Xs) (Ys Ys) (S 0))
        (if (and (pair? Xs) (pair? Ys))
            (loop (cdr Xs) (cdr Ys) (+ S (* (car Xs) (car Ys))))
            S)))

   -- Haskell

   dot xs ys = loop xs ys 0
     where loop (x:xs) (y:ys) s = loop xs ys (s+x*y)
           loop _      _      s = s

   %% Erlang

   dot(Xs, Ys) ->
       loop(Xs, Ys, 0).

   loop([X|Xs], [Y|Ys], S) ->
       loop(Xs, Ys, S + X*Y);
   loop(_, _, S) ->
       S.

Does anyone else remember my proposal that would have had us
write this as

   dot(Xs, Ys) ->
     (S where S = 0 then S+X*Y || X <- Xs & Y <- Ys).


Historically, Prolog -> Strand-88 -> Erlang.
I still don't understand why Erlang uses band bor bnot bsl bsr
instead of Prolog's /\ \/ \ << >> (I understand why it can't
_now_) and why Erlang reversed the sense of == and =:=.

Erlang's syntax hits a "familiarity" sweet spot:
 - it uses infix operators like Pascal/C/Javascript
   (unlike Lisp)
 - it uses f(X, Y, Z) function calls like Pascal/C/Javascript
   (unlike Haskell)
 - it uses = for binding a value to a variable, which looks
   a bit like assignment to a C/Javascript programmer

Or rather, it _did_ hit a sweet spot before records and
the preprocessor were added.  Even then, the preprocessor
is aimed squarely at C programmers.  -define macros may
be (heck, they _are_) even more confusing than lispy ones,
but they are confusing in a comfortingly familiar way.





More information about the erlang-questions mailing list