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

Reply via email to