open MathNet.Symbolics.Operators
let expr = Infix.parseOrUndefined("sin(x) * y + cos(x) + cos( vi / 2.0 ) * cos((v + mu) * step / 2.0)")
let getsymbols(expr:Expression) =
let rec loop (expr:Expression) (acc:Symbol list) =
|Expression.Identifier(x) -> x::acc
|Expression.Function(x,y) -> loop y acc
|Expression.Sum(x) -> x |> List.fold(fun t el -> t @ loop el acc) acc
|Expression.Power(x,y) -> loop x acc @ loop y acc
|Expression.Number(_) -> acc
getsymbols(expr) |> printfn "%A"