public void Funcs()
{
Interpret(
@"func add(a, b) {
return a + b;
}
var a = add(1, 2);
var b = add(a, 3);")
.Equal("a", 3)
.Equal("b", 6);
Interpret(
@"var ma = add, mb = add;
var fe = ma == mb;")
.Equal("fe", true);
Interpret(
@"func fib(n) {
return n <= 1 ? n : (fib(n-1) + fib(n-2));
}
a = fib(10);")
.Equal("a", 55);
Interpret(
@"a = (func(n) {
return n * n;
})(10);")
.Equal("a", 100);
Interpret(
@"a = (func square(n) {
return n * n;
})(10);
b = square(5);")
.Equal("a", 100)
.Equal("b", 25);
Interpret(
@"a = 1;
var f = (func(b, c) {
var d = 4;
return func() {
var e = 5;
return a + b + c + d + e;};
})(2, 3);");
Interpret(@"var sum = f();")
.Equal("sum", 15);
Interpret(
@"a = (func square2(n) {
return n * n;
})(10);
b = square2(5);")
.Equal("a", 100)
.Equal("b", 25);
Interpret(
@"func square3(n) {
return n * n;
}
func invoke(f, n) {
return f(n);
}
a = invoke(square3, 5);")
.Equal("a", 25);
}