[erlang-questions] Function Declaration Syntax
Richard O'Keefe
ok@REDACTED
Mon May 16 05:06:34 CEST 2011
On 13/05/2011, at 9:43 PM, Justus wrote:
> Hi all,
>
> I come to a question on function declaration syntax: why does function
> name appear in each clause?
>
> Name(Pattern11,...,Pattern1N) [when GuardSeq1] ->
> Body1;
> ...;
> Name(PatternK1,...,PatternKN) [when GuardSeqK] ->
> BodyK.
Why not?
That's how you do do it in mathematics when defining a recurrence.
That's how it's done in Haskell.
That's how it's done in SML.
That's how it's done in every functional language I know that _has_
multiple clauses (so, not in Lisp).
>
> It does not provide any information, except that one might make silly mistakes.
Which do you suppose human beings rely on, when reading the code,
to tell whether clauses belong together?
- the function name at the beginning of the line where they can see it
- a distinction between "." and ";" at differently placed ends of lines?
> If omitting it, a new problem is how to indent clauses properly and
> beautifully.
>
> Name(Pattern11,...,Pattern1N) [when GuardSeq1] ->
> Body1;
> (PatternK1,...,PatternKN) [when GuardSeqK] ->
> BodyK.
Don't. Use 'case' instead.
For what it's worth, I write
fun (....) when ... ->
...
; (....) when ... ->
...
end.
If you don't have a name to make the alignment obvious, you desperately
need the semicolon out the front.
More information about the erlang-questions
mailing list