I am new to Julia programming and not an expert either.
While working on a project which involves the translation of Matlab code to
Julia I had the idea to write a
feval(f, x1=NaN)
function in Julia to evaluate a single expression or an array of two or
more expressions by using just one function.
This is the code of the feval(f, x1=NaN) function:
function feval(f,x1 = NaN)
if isnan(x1) == false
global x = x1
end
if typeof(f) == Array{Expr,1}
n = size(f,1)
F = zeros(n,1)
for i=1:n
F[i] = eval(f[i])
end
elseif typeof(f) == Expr
F = 0
F = eval(f)
else
println("f is a ", typeof(f))
error("f is nor an expression nor a single array of expressions.")
end
return F
end
You can use this function with a single expression or with an array of
expressions (x = 3.5) :
julia> f1 = :(3*x - 2*x + 5)
:(+(-(*(3,x),*(2,x)),5))
julia> f2 = :(4*x - 3*x/2)
:(-(*(4,x),/(*(3,x),2)))
julia> f = [f1;f2]
2-element Array{Expr,1}:
:(+(-(*(3,x),*(2,x)),5))
:(-(*(4,x),/(*(3,x),2)))
julia> x = 3.5
3.5
The results:
julia> res_f1 = feval(f1)
8.5
julia> res_f2 = feval(f2)
8.75
julia> res_f = feval(f)
2x1 Array{Float64,2}:
8.5
8.75
Further, you can deliver an optional input value for x with the function
call:
julia> res_f1 = feval(f1, 5.25)
10.25
Note that this changes the global variable x:
julia> x
5.25
In general: Is this appraoch a good or bad idea? Or are there better
options to consider (types, macros etc.)?
Many thanks for your support.
Regards,
Dominik