[erlang-questions] clarify: variable as function name

Robert Virding <>
Mon Dec 10 23:04:31 CET 2007

I think the main problem is that the documentation is a little unclear as to
what should syntactically be an atom, or if not an atom what it can/should
evaluate to. Unfortunately it is not consistent.

So with

    ExprF(Exp1, ... , ExprN)

ExprF should (syntactically) be an atom, or it should evaluate to a fun.
That's it, no other options.



ExprM and ExprF should (syntactically) be atoms or evaluate to atoms. Again
that's it.

Originally it was actually a little more consistent as only the atom forms
were allowed. So it was only foo(...) and foo:bar(...). For the case where
they weren't atoms you had to use apply/2/3. You can view the forms when not
atoms as syntactic sugar for apply (which they actually are):

ExprF(Expr1 ... ExprN)   ==> apply(ExprF, [Expr1 ... ExprN])
ExprM:ExprF(Expr1 ... ExprN)   ==> apply(ExprM, ExprF, [Expr1 ... ExprN])

(but optimised so the argument lists are never built) Then it is consistent.


P.S. Forget the {ExprM,ExprF} form for apply/2, it was a pseudo fun hack
from before funs.

On 10/12/2007, Lovei Laszlo <> wrote:
> Hi all!
> A quote from the reference manual:
> http://www.erlang.org/doc/reference_manual/expressions.html#6.6
>    6.6 Function Calls
>    ExprF(Expr1,...,ExprN)
>    ExprM:ExprF(Expr1,...,ExprN)
>    ExprM should evaluate to a module name and ExprF to a function name
>    or a fun.
>    [...]
>    The module name can be omitted, if ExprF evaluates to the name of a
>    local function, an imported function, or an auto-imported BIF.
> This means that the following code is valid (F evaluates to a local
> function name):
>    f() -> ok.
>    g() -> F=f, F().
> In practice, this aborts with the reason badfun. The question is, which
> one is considered good: the manual, or the implementation?
> Thanks!
> Laszlo
> _______________________________________________
> erlang-questions mailing list
> http://www.erlang.org/mailman/listinfo/erlang-questions
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20071210/2d098bb4/attachment.html>

More information about the erlang-questions mailing list