Have you tried macroexpand?

 — John

On Aug 31, 2014, at 10:28 PM, Mykel Kochenderfer <[email protected]> 
wrote:

> I want to do a calculation like this $\max_{a \in A} \sum_{s \in S} g(s, a)$.
> 
> Of course, I can do something like this:
> maximum([sum([g(s, a) for s in S]) for a in A])
> 
> But it seems like it would be nicer to have the s in S and a in A go in front 
> like in the written equation. I'd like something like this:
> @max (a in A) @sum (s in S) g(s, a)
> 
> So, I tried writing these macros:
> macro max(range, ex)
>     eval(:(maximum($(Expr(:typed_comprehension, :Float64, ex, range)))))
> end
> macro sum(range, ex)
>     eval(:(sum($(Expr(:typed_comprehension, :Float64, ex, range)))))
> end
> 
> To test this, I tried:
> A = 1:10
> S = 1:10
> g(s, a) = s*a
> @max (a in A) @sum (s in S) g(s, a)
> 
> 
> I get this error:
> `convert` has no method matching convert(::Type{Float64}, 
> ::StepRange{Int64,Int64})
> 
> However, @max (a in A) @sum (s in S) g(s, 1)
> works just fine. My macro doesn't seem to like having the a in the sum 
> expression. Any tips would be appreciated!

Reply via email to