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