So then I'm confused (no wait, maybe I'm not). If c is just the symbol :c in the macro, why do we have the following? I am just trying to understand.
julia> @horner(.7, c) 5-element Array{Float64,1}: 1.0 2.0 3.0 4.0 5.0 julia> @horner(.7, c, c, c) 5-element Array{Float64,1}: 2.19 4.38 6.57 8.76 10.95 On Friday, August 29, 2014 9:06:00 PM UTC-7, Jameson wrote: > > in `@macro` context `c` is not iterable, it is a symbol (a literal 'c'). > when the horner macro is evaluated, `c` doesn't have a value, just the > expression `:c` – this difference is what differentiates a macro from a > function. > > > On Sat, Aug 30, 2014 at 12:02 AM, Don MacMillen <don.ma...@gmail.com > <javascript:>> wrote: > >> Oops typo in last responce, I meant. >> >> >> julia> @horner(.75, c...) >> ERROR: unsupported or misplaced expression ... >> >> julia> >> >> On Friday, August 29, 2014 9:00:10 PM UTC-7, Don MacMillen wrote: >>> >>> Ah, well that was perhaps a bad example. My understanding was the >>> you could interpolate an interable. Consider then the horner macro >>> >>> macro horner(x, p...) >>> ex = esc(p[end]) >>> for i = length(p)-1:-1:1 >>> ex = :($(esc(p[i])) + t * $ex) >>> end >>> Expr(:block, :(t = $(esc(x))), ex) >>> end >>> >>> if I have a vector of constant coefficients, shouldn't I be able to >>> splice >>> them into the macro call? >>> >>> julia> c = [1.:5] >>> 5-element Array{Float64,1}: >>> 1.0 >>> 2.0 >>> 3.0 >>> 4.0 >>> 5.0 >>> >>> julia> @horner(.x, c...) >>> ERROR: syntax: invalid identifier name "." >>> >>> >>> >>> On Friday, August 29, 2014 8:45:00 PM UTC-7, Jameson wrote: >>>> >>>> that would be utterly pointless, since you can already just write: >>>> @mymacro(“aaa”, “bbb”, “ccc”) >>>> >>>> if you are intending to look at values, you should be using a function. >>>> a macro is a function but it's also special in that it takes the quoted >>>> AST >>>> of it’s arguments during parsing, not their values during runtime >>>> >>>> observe when b... is getting printed: >>>> >>>> julia> macro mymacro(a,b) >>>> println(b) >>>> end >>>> >>>> julia> f() = @mymacro(a,b...) >>>> b... >>>> f (generic function with 1 method) >>>> >>>> julia> f() >>>> >>>> >>>> >>>> >>>> On Fri, Aug 29, 2014 at 9:45 PM, Don MacMillen <don.ma...@gmail.com> >>>> wrote: >>>> >>>>> I meant something like this >>>>> >>>>> julia> macro mymacro(a,b,c) >>>>> println(c) >>>>> end >>>>> >>>>> julia> @mymacro("aaa", ("bbb", "ccc")...) >>>>> ERROR: wrong number of arguments >>>>> >>>>> which works fine for functions >>>>> >>>>> julia> function myfunc(a,b,c) >>>>> println(c) >>>>> end >>>>> myfunc (generic function with 1 method) >>>>> >>>>> julia> myfunc("aaa", ("bbb", "ccc")...) >>>>> ccc >>>>> >>>>> >>>>> >>>>> >>>>> On Friday, August 29, 2014 6:02:45 PM UTC-7, Jameson wrote: >>>>> >>>>>> splicing into a macro works for me: >>>>>> >>>>>> julia> macro mymacro(a,b) >>>>>> println(b) >>>>>> end >>>>>> >>>>>> julia> @mymacro(x, y...) >>>>>> y... >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Fri, Aug 29, 2014 at 8:57 PM, Don MacMillen <don.ma...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> The slides are great. Many thanks for sharing. >>>>>>> >>>>>>> I do have a question about macros that maybe you can answer. In >>>>>>> your nb on >>>>>>> metaprogramming you have the horner macro listed and it uses a >>>>>>> temporary >>>>>>> variable t. But this macro can be written without using a temporary >>>>>>> variable. >>>>>>> It turns out to be slower (the no temp version) if we are computing >>>>>>> a bunch of >>>>>>> polynomials with the same coefficients, but is a tiny bit faster if >>>>>>> the coefficients >>>>>>> are always changing. So are the Expr's cached? Or is something else >>>>>>> going on? >>>>>>> >>>>>>> Also (OK I have two questions) it looks like we cannot splice into a >>>>>>> macro call? >>>>>>> Ie @mymacro(x, y...) doesn't work? >>>>>>> >>>>>>> Thanks again. >>>>>>> >>>>>>> Don >>>>>>> >>>>>>> >>>>>>> On Friday, August 29, 2014 4:08:44 AM UTC-7, Steven G. Johnson wrote: >>>>>>>> >>>>>>>> I just gave a talk on Julia at EuroSciPy, and managed to escape >>>>>>>> alive. :-) >>>>>>>> >>>>>>>> I think they will post a video at some point, but in the meantime >>>>>>>> the slides and IJulia notebooks are posted at: >>>>>>>> >>>>>>>> https://github.com/stevengj/Julia-EuroSciPy14 >>>>>>>> >>>>>>>> --SGJ >>>>>>>> >>>>>>> >>>>>> >>>> >