I think you would be better off using multiple dispatch to split your function by type.
-- John > On Dec 18, 2013, at 5:11 AM, Dominik Holenstein <[email protected]> wrote: > > I am new to Julia programming and not an expert. > > 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 > > > > > 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 the 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 my appraoch a good or bad idea? Or are there better options to > consider (types, macros etc.)? > > > > Many thanks for your support. > > > > Regards, > > Dominik
