Please try to avoid this business of creating the same conversation in
three places.

On Thu, Jan 28, 2016 at 8:10 AM, Stefan Karpinski <[email protected]>
wrote:

>
> http://stackoverflow.com/questions/35051773/create-local-variables-programmatically-from-a-dictionary-in-julia
>
> On Thu, Jan 28, 2016 at 8:10 AM, Stefan Karpinski <[email protected]>
> wrote:
>
>> 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