Arithmetic evaluation: Difference between revisions

Added Julia
(Updated D entry: alias this)
(Added Julia)
Line 2,245:
evalArithmeticExp('2 * (3 + (4 * 5 + (6 * 7) * 8) - 9) * 10') // 7000
evalArithmeticExp('2*-3--4+-0.25' // -2.25</pre>
 
=={{header|Julia}}==
Julia's homoiconic nature and strong metaprogramming facilities make AST/Expression parsing and creation as accessible and programmatic as other language features
<lang julia>julia> expr="2 * (3 -1) + 2 * 5"
"2 * (3 -1) + 2 * 5"
 
julia> parsed = parse(expr)
:(+(*(2,-(3,1)),*(2,5)))
 
julia> t = typeof(parsed)
Expr
 
julia> names(t) #shows type fields
(:head,:args,:typ)
 
julia> expr="2 * (3 -1) + 2 * 5"
"2 * (3 -1) + 2 * 5"
 
julia> parsed = parse(expr) #Julia provides low-level access to language parser for AST/Expr creation
:(+(*(2,-(3,1)),*(2,5)))
 
julia> t = typeof(parsed)
Expr
 
julia> names(t) #shows type fields
(:head,:args,:typ)
 
julia> parsed.args #Inspect our 'Expr' type innards
3-element Any Array:
:+
:(*(2,-(3,1)))
:(*(2,5))
 
julia> typeof(parsed.args[2]) #'Expr' types can nest
Expr
 
julia> parsed.args[2].args
3-element Any Array:
:*
2
:(-(3,1))
 
julia> parsed.args[2].args[3].args #Will nest until lowest level of AST
3-element Any Array:
:-
3
1
 
julia> eval(parsed)
14
 
julia> eval(parse("1 - 5 * 2 / 20 + 1"))
1.5
 
julia> eval(parse("2 * (3 + ((5) / (7 - 11)))"))
3.5</lang>
 
=={{header|Lua}}==