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

Reply via email to