-
Notifications
You must be signed in to change notification settings - Fork 34
Closed as not planned
Description
W2Julia expects an Expr to be returned, not WExpr.
Expr(:call , funcDict[ wexpr.head.name],[W2Julia(arg) for arg in wexpr.args])
or use W2JuliaExpr instead
W2JuliaExpr(wexpr::WExpr)=Expr(
:call,
haskey(funcDict, wexpr.head.name) ? funcDict[wexpr.head.name] : wexpr.head.name,
[W2JuliaExpr(arg) for arg in wexpr.args]...
)
W2JuliaExpr(wexpr::WSymbol) = Symbol(wexpr.name)
W2JuliaExpr(wexpr::Number) = wexpr
add Expr2Fcn to convert WExpr into a usable function.
getSymbols(sym::Symbol) = sym in values(funcDict) ? Vector{Symbol}() : [sym]
getSymbols(sym::Number) = Vector{Symbol}()
function getSymbols(expr::Expr)
r = [getSymbols(exp) for exp in expr.args]
rnew = []
for rr in r::Vector
append!(rnew, rr)
end
unique(rnew)
end
Expr2Fcn(expr::Expr,vars::Expr) = eval(Expr(:(->), vars, expr))
Expr2Fcn(expr::Expr) = Expr2Fcn(expr, Expr(:tuple, getSymbols(expr)...))
Expr2Fcn(wexpr::WExpr)= Expr2Fcn(W2JuliaExpr(wexpr))
Expr2Fcn(weval(W`mathematica expression`))
Metadata
Metadata
Assignees
Labels
No labels