...
I think I gave you all help I could, to understand the question. I am not
going to explain it over and over and over.
On Sunday, June 5, 2016 at 2:40:31 PM UTC+2, Tamas Papp wrote:
>
> I am sorry --- I did not realize you had anger management issues. In
> any case, consider the example in the section of the manual I linked,
> with macros and functions:
>
> macro time_mac(ex)
> return quote
> local t0 = time()
> local val = $ex
> local t1 = time()
> println("elapsed time: ", t1-t0, " seconds")
> val
> end
> end
>
> function time_fun(ex)
> return quote
> local t0 = time()
> local val = $ex
> local t1 = time()
> println("elapsed time: ", t1-t0, " seconds")
> val
> end
> end
>
> Then observe the output of
>
> time_fun(:(foo()))
>
> macroexpand(:(@time_mac(foo()))
>
> On Sun, Jun 05 2016, Ford O. wrote:
>
> > Don't make me angry.
> >
> > I have read that chapter more than 5 times.
> > You could also read my question 5 times.
> >
> > I am asking why do we have to specify macro and function with different
> > keyword, when compiler exactly knows whether we are calling macro or
> > function.
> >
> > Example for ...:
> > callable foo(e::Expr) = :(&e)
> > @foo 2 + 2
> > foo(2 + 2)
> > # two versions of foo callable are compiled, one as macro, one as
> function
> >
> > Does the *macro *keyword have any significance for compiler?
> >
> > On Sunday, June 5, 2016 at 1:38:32 PM UTC+2, Tamas Papp wrote:
> >>
> >> Sorry for linking a local version of the manual -- still, you could
> >> probably have found it with a bit of effort, but it appears that you
> are
> >> adamant in your refusal to read it.
> >>
> >> I would say that the most important reasons is that macros have special
> >> conventions because of hygiene, see
> >>
> http://docs.julialang.org/en/release-0.4/manual/metaprogramming/#hygiene
> >>
> >> Some languages (eg Common Lisp) have the same namespace for macros and
> >> functions, Julia distinguishes them with @. So they are not as seamless
> >> as in CL, but at the same time they stand out and warn the reader that
> >> source transformation is going on. There could be arguments for both
> >> choices, but Julia chose this one.
> >>
> >> On Sun, Jun 05 2016, Ford O. wrote:
> >>
> >> > You got it wrong.
> >> > In different words.
> >> >
> >> > Why do we need to specify macro and function block with macro and
> >> function
> >> > keyword? Isnt the '@' symbol enough?
> >> >
> >> > On Sunday, June 5, 2016 at 1:11:48 PM UTC+2, Tamas Papp wrote:
> >> >>
> >> >> A macro is a function that is used to transform (a representation)
> of
> >> >> source code. Consequently, it is called when Julia evaluates your
> >> >> function defintions, not at runtime. Please read
> >> >> file:///usr/share/doc/julia-doc/html/manual/metaprogramming.html
> where
> >> >> you find examples.
> >> >>
> >> >> Regarding you example: it is unclear what you are trying to do, but
> >> >> unless you use the macro keyword, you get an ordinary function, not
> a
> >> >> macro.
> >> >>
> >> >> On Sun, Jun 05 2016, Ford O. wrote:
> >> >>
> >> >> > What makes macro different from function?
> >> >> >
> >> >> > Why is it not possible to do:
> >> >> > foo(e::Expr) = :(&e)
> >> >> > @foo x = x + 5
> >> >> >
> >> >> > On Friday, June 3, 2016 at 10:05:46 AM UTC+2, Ford O. wrote:
> >> >> >
> >> >> > I think this deserves an own topic.
> >> >> >
> >> >> > You should post here syntax that looks like duplicate or you
> think
> >> it
> >> >> could use already existing keyword. (mark with # identical or #
> >> >> replacement)
> >> >> > Rule of thumb - the less special syntax the better.
> >> >> >
> >> >> > # identical
> >> >> > # replace ' , ' with ' ; ' in arrays ?
> >> >> > [1, 2, 3, 4]
> >> >> > [1; 2; 3; 4]
> >> >> >
> >> >> > # identical
> >> >> > # replace ' = ' with ' in ' in for loops ?
> >> >> > for i = 1:10
> >> >> > for i in 1:10
> >> >> >
> >> >> > # replacement
> >> >> > # replace ' -> ' with ' = ' in anonymous functions ?
> >> >> > (a, b, c) -> a + b + c
> >> >> > (a, b, c) = a + b + c
> >> >>
> >> >>
> >>
> >>
>
>