aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interpreter.py9
1 files changed, 5 insertions, 4 deletions
diff --git a/interpreter.py b/interpreter.py
index 000b3c2..da8cc96 100644
--- a/interpreter.py
+++ b/interpreter.py
@@ -34,6 +34,7 @@ class Function:
self.body = body
self.args = args
self.many = many
+ self.type_ = TypeEnum.ANY # TODO no it's not
def describe(self, name=None):
if name is None:
@@ -859,18 +860,18 @@ GLOBALS.register("floor", Builtin(interpretFloor, [Arg("floor", TypeEnum.NUMBER,
def interpretFilter(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)
+ if not isinstance(func, Function):
+ raise InterpretPanic(symbol, "requires a :func as its first argument", func)
lst = evaluate(args[1], env, ns)
if not isinstance(lst, List):
raise InterpretPanic(symbol, "requires a :list as its second argument", lst)
out = []
for arg in lst.args:
- ev = evaluate(List([func, arg]), env, ns)
+ ev = func.call(List([func, arg]), env, ns)
if not isinstance(ev, Bool):
raise InterpretPanic(symbol, "function must return :bool", ev)
if ev.value:
out.append(arg)
return List(out, True)
-GLOBALS.register("filter", Builtin(interpretFilter, [Arg("func", TypeEnum.ANY, False, True), Arg("list", TypeEnum.LIST, False, False)]))
+GLOBALS.register("filter", Builtin(interpretFilter, [Arg("func", TypeEnum.ANY, False, False), Arg("list", TypeEnum.LIST, False, False)]))