https://groups.google.com/forum/#!topic/julia-users/axwQqFeIlCQ

On Wed, Jan 27, 2016 at 11:05 PM, Yichao Yu <[email protected]> wrote:

> On Wed, Jan 27, 2016 at 9:47 PM, Fady Shoukry <[email protected]>
> wrote:
> >
> >>
> >> Depending on what API JuMP provide and what API you want to provide, I
> >> think you should either keep the dict (if JuMP can handle it) or use
> >> meta programing to construct an AST/function based on the user input
> >> and evaluate that.
> >
> >
> > Thanks for the quick reply. Could you elaborate on that last part
> regarding
> > constructing an AST/function (with an example if possible)?
> >
>
> A simple example that hopefully shows what I meant,
>
>
> ```
> julia> vars = [:a, :b]
> 2-element Array{Symbol,1}:
>  :a
>  :b
>
> julia> expr = :(a + b)
> :(a + b)
>
> julia> function make_function(name, vars, expr)
>            :(function $name()
>                $([:($v = 1) for v in vars]...)
>                $expr
>              end)
>        end
> make_function (generic function with 1 method)
>
> julia> func_ast = make_function(:new_function, vars, expr)
> :(function new_function() # none, line 3:
>         a = 1
>         b = 1 # none, line 4:
>         a + b
>     end)
>
> julia> eval(func_ast)
> new_function (generic function with 1 method)
>
> julia> new_function()
> 2
>
> julia> @code_warntype new_function()
> Variables:
>   a::Int64
>   b::Int64
>
> Body:
>   begin  # none, line 3:
>       a = 1
>       b = 1 # none, line 4:
>       return (Base.box)(Int64,(Base.add_int)(a::Int64,b::Int64))
>   end::Int64
> ```
>

Reply via email to