在Julia中,如何为变量赋值并评估函数

时间:2015-12-10 16:04:53

标签: function variables extract julia evaluate

在用户的文本文件中,有一个字符串可读取,例如“2 * X + 3 * Y”。

我必须:(1)将字符串解释为两个变量“X”和“Y”的函数; (2)将这两个变量写入监视器,并要求输入来自用户的变量值; (3)使用这些变量值,我必须计算函数的值。

https://groups.google.com/forum/#!topic/julia-users/NOSg-cpFklY之后,任务(1)可以完成:

vars(vs,_)=vs

vars(vs,s::Symbol)=isdefined(s) ? vs : push!(vs,s)

function vars(vs,e::Expr)

    for arg in e.args

        vars(vs,arg)

    end

    vs

end
extractvars(s::String)=vars(Set{Symbol}(),parse(s))

setvar=extractvars(“2*X+3*Y”) # then I have: Set([:X,:Y])

如何完成任务(2)和(3)?

1 个答案:

答案 0 :(得分:1)

vars(vs,_)=vs;

vars(vs,s::Symbol)=isdefined(s) ? vs : push!(vs,s);

function vars(vs,e::Expr)
  for arg in e.args
    vars(vs,arg)
  end
  vs
end 

function anonyfun(s::ASCIIString) # create an anonymous function from string
  e=parse(s);
  a=:(()->$e);
  vars(a.args[1].args,e);
  eval(a),length(a.args[1].args); # return function, length of args
end

foo,len=anonyfun("2*X+3*Y"); ; # => (anonymous function), 2

foo([parse(Float64,readline()) for i=1:len]...) # binding user inputs
  1. 它只是有效但参数类型是什么?
  2. 提升匿名功能:FastAnonymous