aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--neb/std/core.py10
-rw-r--r--neb/std/functools.py8
2 files changed, 8 insertions, 10 deletions
diff --git a/neb/std/core.py b/neb/std/core.py
index 1645699..f6b5b06 100644
--- a/neb/std/core.py
+++ b/neb/std/core.py
@@ -245,16 +245,6 @@ def interpretAnd(symbol, args, env, ns):
CORE.register("and", Builtin("and", interpretAnd, [or_arg, or_arg], or_arg, Type(":bool")))
-def interpretApply(symbol, args, env, ns):
- # TODO: to support lambdas, we can't assume the func is defined
- func = args[0]
- if not isinstance(func, Symbol):
- raise InterpretPanic(symbol, "requires a symbol as its first argument", func)
- new_expr = Expr([func] + args[1].args)
- return evaluate(new_expr, env, ns)
-
-CORE.register("apply", Builtin("apply", interpretApply, [Arg("func", TypeEnum.ANY, lazy=True), Arg("list", TypeEnum.LIST)]))
-
def interpretBench(symbol, args, env, ns):
before = datetime.now()
ret = evaluate(args[0], env, ns)
diff --git a/neb/std/functools.py b/neb/std/functools.py
index 8a76e98..f83c49d 100644
--- a/neb/std/functools.py
+++ b/neb/std/functools.py
@@ -34,3 +34,11 @@ def interpretMap(symbol, args, env, ns):
FUNCTOOLS.register("map", Builtin("map", interpretMap, [Arg("func", TypeEnum.ANY), Arg("list", TypeEnum.LIST)], return_type=Type(":list")))
+# TODO I think this is wrong
+def interpretApply(symbol, args, env, ns):
+ func = args[0]
+ if not isinstance(func, Function):
+ raise InterpretPanic(symbol, "requires a symbol as its first argument", func)
+ return func.call(Expr([func] + args[1].args), env, ns)
+
+FUNCTOOLS.register("apply", Builtin("apply", interpretApply, [Arg("func", TypeEnum.ANY), Arg("list", TypeEnum.LIST)]))