[erlang-questions] Fwd: How do funs work ?

黃耀賢 (Yau-Hsien Huang) g9414002.pccu.edu.tw@REDACTED
Fri Mar 30 02:15:55 CEST 2012


---------- Forwarded message ----------
From: 黃耀賢 (Yau-Hsien Huang) <g9414002.pccu.edu.tw@REDACTED>
Date: 2012/3/30
Subject: Re: [erlang-questions] How do funs work ?
To: Yoshihiro Tanaka <hirotnkg@REDACTED>


2012/3/30 Yoshihiro Tanaka <hirotnkg@REDACTED>

> Hi Yau-Hsien,
>
> It seems like not. For example, below example indicates F is not
> evaluated when constructing F2.
>
> 1> F = fun() -> blah end.
> #Fun<erl_eval.20.21881191>
> 2> F2 = fun() -> 1 + 2 + F() end.
>

No. Here you type F() which means F is evaluated when F2 is evaluating.
I said the word "evaluated" but "reduced."

If you expand the symbol 'F' to the function, in syntax, it must be
    F2 = fun() -> 1 + 2 + (fun -> 0 end)() end.
but
    F2 = fun() -> 1 + 2 + (fun() -> 0 end) end.
Later one is depicted in your original letter, then I point the difference
on parenthesis after. Maybe it's ill-wording, that it ought to be function
application
for symbol 'F()' and function-taking for symbol 'F'.


#Fun<erl_eval.20.21881191>
> 3> F2().
> ** exception error: bad argument in an arithmetic expression
>     in operator  +/2
>        called as 3 + blah
>
> I also checked core file of sample code, using 'to_core' option, and the
> code:
> 18           fun() -> 9 + 10 +
> 19             fun() -> 0 end()
> 20           end()
>

The part of the core file seems as what I mentioned. :)


> is translated to:
> %% Line 18
> ( fun () ->
>      let <_cor0> =
>    %% Line 19
>    ( fun () ->
>    0
>      -| [{'id',{2,100470014,'-make_fun2/0-fun-0-'}}] )
>      in  let <_cor1> =
>        %% Line 19
>        apply _cor0
>      ()
>    in  call 'erlang':'+'
>      (19, _cor1)
>  -| [{'id',{3,119737161,'-make_fun2/0-fun-1-'}}] )
>
> It defines <_cor0>, as fun() -> 0 end, then doing 'apply _cor0'. So
> It's calling fun _cor0.
>
>
> Yoshihiro
>
>
>
> >
> >>
> >> Also, is there any difference between funs that are defined at runtime
> >> and funs that are defined at compile time in terms of how they are
> >> executed ?
> >>
> >> Thank you
> >> Yoshihiro
> >>
> >> _______________________________________________
> >> erlang-questions mailing list
> >> erlang-questions@REDACTED
> >> http://erlang.org/mailman/listinfo/erlang-questions
> >
> >
> >
> >
> > --
> >
> > Best Regards.
> >
> > --- Y-H. H.
> >
> >
>



-- 

Best Regards.

--- Y-H. H.





-- 

Best Regards.

--- Y-H. H.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20120330/5e900bc3/attachment.htm>


More information about the erlang-questions mailing list