input : 1 + 2 + 3 + 4
parsed : Add(Add(Add(Val(1.0),Val(2.0)),Val(3.0)),Val(4.0))
eval'd : Val(10.0)
input : 1 * 2 * 3 * 4
parsed : Mul(Mul(Mul(Val(1.0),Val(2.0)),Val(3.0)),Val(4.0))
eval'd : Val(24.0)
input : 1 + x
parsed : Add(Val(1.0),Var(x))
eval'd : Add(Val(1.0),Var(x))
input : x = 5
parsed : VarDef(x,Val(5.0))
eval'd : Val(5.0)
input : 1 - x
parsed : Sub(Val(1.0),Var(x))
eval'd : Val(-4.0)
input : x < 5
parsed : BoolLT(Var(x),Val(5.0))
eval'd : BoolVal(false)
input : !(x != 5)
parsed : Not(BoolNE(Var(x),Val(5.0)))
eval'd : BoolVal(true)
input : x < -1 || x >= -1
parsed : Or(BoolLT(Var(x),Neg(Val(1.0))),BoolGE(Var(x),Neg(Val(1.0))))
eval'd : BoolVal(true)
input : #F + #T
parsed : Add(BoolVal(false),BoolVal(true))
eval'd : Add(BoolVal(false),BoolVal(true))
input : 1 && 2
parsed : And(Val(1.0),Val(2.0))
eval'd : And(Val(1.0),Val(2.0))
input : def add(x, y) = x + y
parsed : FunDef(add,List(x, y),Add(Var(x),Var(y)))
eval'd : FunDef(add,List(x, y),Add(Var(x),Var(y)))
input : add(1, 2)
parsed : FunCall(add,List(Val(1.0), Val(2.0)))
eval'd : Val(3.0)
input : add(3 * 3, 4 * 4)
parsed : FunCall(add,List(Mul(Val(3.0),Val(3.0)), Mul(Val(4.0),Val(4.0))))
eval'd : Val(25.0)
input : -add(1, add(2, 3)) == -6
parsed : BoolEQ(Neg(FunCall(add,List(Val(1.0), FunCall(add,List(Val(2.0), Val(3.0)))))),Neg(Val(6.0)))
eval'd : BoolVal(true)
input : def mul(x, y) = x * y
parsed : FunDef(mul,List(x, y),Mul(Var(x),Var(y)))
eval'd : FunDef(mul,List(x, y),Mul(Var(x),Var(y)))
input : mul(4 / 2, 6 - 3)
parsed : FunCall(mul,List(Div(Val(4.0),Val(2.0)), Sub(Val(6.0),Val(3.0))))
eval'd : Val(6.0)
input : list = {1, 2 + 3, #T || #F, { nested }, add(mul(2, a), mul(b, 5))}
parsed : VarDef(list,EList(List(Val(1.0), Add(Val(2.0),Val(3.0)), Or(BoolVal(true),BoolVal(false)), EList(List(Var(nested))), FunCall(add,List(FunCall(mul,List(Val(2.0), Var(a))), FunCall(mul,List(Var(b), Val(5.0))))))))
eval'd : EList(List(Val(1.0), Val(5.0), BoolVal(true), EList(List(Var(nested))), Add(Mul(Val(2.0),Var(a)),Mul(Var(b),Val(5.0)))))
input : a = -5
parsed : VarDef(a,Neg(Val(5.0)))
eval'd : Val(-5.0)
input : list
parsed : Var(list)
eval'd : EList(List(Val(1.0), Val(5.0), BoolVal(true), EList(List(Var(nested))), Add(Val(-10.0),Mul(Var(b),Val(5.0)))))
input : b = 2
parsed : VarDef(b,Val(2.0))
eval'd : Val(2.0)
input : list
parsed : Var(list)
eval'd : EList(List(Val(1.0), Val(5.0), BoolVal(true), EList(List(Var(nested))), Val(0.0)))
input : ilist = {1, 2, 3, 4, 5}
parsed : VarDef(ilist,EList(List(Val(1.0), Val(2.0), Val(3.0), Val(4.0), Val(5.0))))
eval'd : EList(List(Val(1.0), Val(2.0), Val(3.0), Val(4.0), Val(5.0)))
input : list[ilist[list[5] + add(1, mul(2, 2))]]
parsed : IndexOp(Var(list),IndexOp(Var(ilist),Add(IndexOp(Var(list),Val(5.0)),FunCall(add,List(Val(1.0), FunCall(mul,List(Val(2.0), Val(2.0))))))))
eval'd : Val(0.0)
input : mat = {{1, 2}, {3, 4}}
parsed : VarDef(mat,EList(List(EList(List(Val(1.0), Val(2.0))), EList(List(Val(3.0), Val(4.0))))))
eval'd : EList(List(EList(List(Val(1.0), Val(2.0))), EList(List(Val(3.0), Val(4.0)))))
input : def trans2(m) = {{m[1][1], m[2][1]}, {m[1][2], m[2][2]}}
parsed : FunDef(trans2,List(m),EList(List(EList(List(IndexOp(IndexOp(Var(m),Val(1.0)),Val(1.0)), IndexOp(IndexOp(Var(m),Val(2.0)),Val(1.0)))), EList(List(IndexOp(IndexOp(Var(m),Val(1.0)),Val(2.0)), IndexOp(IndexOp(Var(m),Val(2.0)),Val(2.0)))))))
eval'd : FunDef(trans2,List(m),EList(List(EList(List(IndexOp(IndexOp(Var(m),Val(1.0)),Val(1.0)), IndexOp(IndexOp(Var(m),Val(2.0)),Val(1.0)))), EList(List(IndexOp(IndexOp(Var(m),Val(1.0)),Val(2.0)), IndexOp(IndexOp(Var(m),Val(2.0)),Val(2.0)))))))
input : trans2(mat)
parsed : FunCall(trans2,List(Var(mat)))
eval'd : EList(List(EList(List(Val(1.0), Val(3.0))), EList(List(Val(2.0), Val(4.0)))))
input : trans2(trans2(mat))
parsed : FunCall(trans2,List(FunCall(trans2,List(Var(mat)))))
eval'd : EList(List(EList(List(Val(1.0), Val(2.0))), EList(List(Val(3.0), Val(4.0)))))
input : def max(x, y) = if (x > y) x else y
parsed : FunDef(max,List(x, y),If(BoolGT(Var(x),Var(y)),Var(x),Var(y)))
eval'd : FunDef(max,List(x, y),If(BoolGT(Var(x),Var(y)),Var(x),Var(y)))
input : max(2, 1)
parsed : FunCall(max,List(Val(2.0), Val(1.0)))
eval'd : Val(2.0)
input : max(3, 4)
parsed : FunCall(max,List(Val(3.0), Val(4.0)))
eval'd : Val(4.0)
input : def max3(x, y, z) = max(x, max(y, z))
parsed : FunDef(max3,List(x, y, z),FunCall(max,List(Var(x), FunCall(max,List(Var(y), Var(z))))))
eval'd : FunDef(max3,List(x, y, z),FunCall(max,List(Var(x), FunCall(max,List(Var(y), Var(z))))))
input : max3(1, 2, 3)
parsed : FunCall(max3,List(Val(1.0), Val(2.0), Val(3.0)))
eval'd : Val(3.0)
input : max3(3, 2, 1)
parsed : FunCall(max3,List(Val(3.0), Val(2.0), Val(1.0)))
eval'd : Val(3.0)
input : def factorial(n) = if (n == 0) 1 else n * factorial(n - 1)
parsed : FunDef(factorial,List(n),If(BoolEQ(Var(n),Val(0.0)),Val(1.0),Mul(Var(n),FunCall(factorial,List(Sub(Var(n),Val(1.0)))))))
eval'd : FunDef(factorial,List(n),If(BoolEQ(Var(n),Val(0.0)),Val(1.0),Mul(Var(n),FunCall(factorial,List(Sub(Var(n),Val(1.0)))))))
input : factorial(4)
parsed : FunCall(factorial,List(Val(4.0)))
eval'd : Val(24.0)
input : factorial(5)
parsed : FunCall(factorial,List(Val(5.0)))
eval'd : Val(120.0)
input : def f(x) = x * x - 5 * x + 6
parsed : FunDef(f,List(x),Add(Sub(Mul(Var(x),Var(x)),Mul(Val(5.0),Var(x))),Val(6.0)))
eval'd : FunDef(f,List(x),Add(Sub(Mul(Var(x),Var(x)),Mul(Val(5.0),Var(x))),Val(6.0)))
input : f(1)
parsed : FunCall(f,List(Val(1.0)))
eval'd : Val(2.0)
input : f(2)
parsed : FunCall(f,List(Val(2.0)))
eval'd : Val(0.0)
input : f(3)
parsed : FunCall(f,List(Val(3.0)))
eval'd : Val(0.0)
input : def root(p, x) = p(x) == 0
parsed : FunDef(root,List(p, x),BoolEQ(FunCall(p,List(Var(x))),Val(0.0)))
eval'd : FunDef(root,List(p, x),BoolEQ(FunCall(p,List(Var(x))),Val(0.0)))
input : root(f, 1)
parsed : FunCall(root,List(Var(f), Val(1.0)))
eval'd : BoolVal(false)
input : root(f, 2)
parsed : FunCall(root,List(Var(f), Val(2.0)))
eval'd : BoolVal(true)
input : root(f, 3)
parsed : FunCall(root,List(Var(f), Val(3.0)))
eval'd : BoolVal(true)
input : def fold(f, c, n) = if (n == 0) c else f(n, fold(f, c, n - 1))
parsed : FunDef(fold,List(f, c, n),If(BoolEQ(Var(n),Val(0.0)),Var(c),FunCall(f,List(Var(n), FunCall(fold,List(Var(f), Var(c), Sub(Var(n),Val(1.0))))))))
eval'd : FunDef(fold,List(f, c, n),If(BoolEQ(Var(n),Val(0.0)),Var(c),FunCall(f,List(Var(n), FunCall(fold,List(Var(f), Var(c), Sub(Var(n),Val(1.0))))))))
input : fold(mul, 1, 4)
parsed : FunCall(fold,List(Var(mul), Val(1.0), Val(4.0)))
eval'd : Val(24.0)
input : fold(mul, 1, 5) == factorial(5)
parsed : BoolEQ(FunCall(fold,List(Var(mul), Val(1.0), Val(5.0))),FunCall(factorial,List(Val(5.0))))
eval'd : BoolVal(true)
input : fold(add, 0, 10)
parsed : FunCall(fold,List(Var(add), Val(0.0), Val(10.0)))
eval'd : Val(55.0)
input : def even(n) = if (n == 0) #T else if (n == 1) #F else even(n - 2)
parsed : FunDef(even,List(n),If(BoolEQ(Var(n),Val(0.0)),BoolVal(true),If(BoolEQ(Var(n),Val(1.0)),BoolVal(false),FunCall(even,List(Sub(Var(n),Val(2.0)))))))
eval'd : FunDef(even,List(n),If(BoolEQ(Var(n),Val(0.0)),BoolVal(true),If(BoolEQ(Var(n),Val(1.0)),BoolVal(false),FunCall(even,List(Sub(Var(n),Val(2.0)))))))
input : def odd(n) = !even(n)
parsed : FunDef(odd,List(n),Not(FunCall(even,List(Var(n)))))
eval'd : FunDef(odd,List(n),Not(FunCall(even,List(Var(n)))))
input : def foldif(p, f, c, n) = if (n == 0) c else if (p(n) == #T) f(n, foldif(p, f, c, n - 1)) else foldif(p, f, c, n - 1)
parsed : FunDef(foldif,List(p, f, c, n),If(BoolEQ(Var(n),Val(0.0)),Var(c),If(BoolEQ(FunCall(p,List(Var(n))),BoolVal(true)),FunCall(f,List(Var(n), FunCall(foldif,List(Var(p), Var(f), Var(c), Sub(Var(n),Val(1.0)))))),FunCall(foldif,List(Var(p), Var(f), Var(c), Sub(Var(n),Val(1.0)))))))
eval'd : FunDef(foldif,List(p, f, c, n),If(BoolEQ(Var(n),Val(0.0)),Var(c),If(BoolEQ(FunCall(p,List(Var(n))),BoolVal(true)),FunCall(f,List(Var(n), FunCall(foldif,List(Var(p), Var(f), Var(c), Sub(Var(n),Val(1.0)))))),FunCall(foldif,List(Var(p), Var(f), Var(c), Sub(Var(n),Val(1.0)))))))
input : foldif(even, add, 0, 10)
parsed : FunCall(foldif,List(Var(even), Var(add), Val(0.0), Val(10.0)))
eval'd : Val(30.0)
input : foldif(odd, add, 0, 10)
parsed : FunCall(foldif,List(Var(odd), Var(add), Val(0.0), Val(10.0)))
eval'd : Val(25.0)