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 
> >> 
> >> 
>
>

Reply via email to