newbie question about fun expressions
Håkan Stenholm
hakan.stenholm@REDACTED
Sat Sep 17 19:47:45 CEST 2005
Jose Balado wrote:
>Hi, I have a question:
>
>In "Erlang reference manual" 6.17 Fun Expressions is says that the following
>fun expressions are also allowed:
>
>fun Name/Arity
>fun Module:Name/Arity
>
> So I tried "fun Name/Arity" like this:
>
>46> lists:map(fun is_atom/1,[peter,1]).
>[true,false]
>47>
>
>But "fun Module:Name/Arity" seems that does not work:
>
>47> lists:map(fun lists:reverse/1,[peter,1]).
>** 1: syntax error before: ':' **
>47>
>
> What am I doing wrong?
>
>
You should ensure that your using a recent version of Erlang/OTP as the
"fun Module:Name/Arity" syntax is fairly recent. My code has been tested
in Erlang/OTP R10B-6.
1) is_atom/1 in source code
test.erl
================
module(test).
-export([test/0]).
test() ->
lists:map(fun is_atom/1,[peter,1]). %% 'is_atom/1' and
'erlang:is_atom/1' both work
================
erlang shell
================
2> test:test().
[true,false]
This works as functions in the module 'erlang' don't require to be
called as 'erlang:function(...)', the erlang shell which sometimes works
slightly different from regular code, doesn't appear to be able to
figure out where to look for is_atom/1 if the module isn't supplied, as
can be seen below:
2) call in erlang shell, using Function/Arity syntax
2> lists:map(fun is_atom/1,[peter,1]).
=ERROR REPORT==== 17-Sep-2005::19:13:03 ===
Error in process <0.30.0> with exit value:
{undef,[{erl_eval,is_atom,1},{erl_eval,expr,3}]}
** exited: {undef,[{erl_eval,is_atom,1},{erl_eval,expr,3}]} **
the function is_atom/1 is not found in erl_eval (the "module" of the
shell), i.e. it's 'undefined', when erl_eval tries to process
'lists:map(fun is_atom/1,[peter,1]).'.
3) call in erlang shell, using Module:Function/Arity syntax works as
expected
3> lists:map(fun erlang:is_atom/1,[peter,1]).
[true,false]
>Thanks.
>
>Best regards,
>Jose
>
>
>
>
>
>
More information about the erlang-questions
mailing list