aboutsummaryrefslogtreecommitdiff
path: root/neb
diff options
context:
space:
mode:
authormryouse2022-07-20 20:56:00 +0000
committermryouse2022-07-20 20:56:00 +0000
commitc3ec685f06c0656c38196cc3b15af4e25acb38a2 (patch)
tree88f2b062e9363ada8e92feeefc31cf742cb88770 /neb
parent2541ae567a2aeffe1144c249b2ec1db0a34dedef (diff)
implement multifunc for math
Diffstat (limited to 'neb')
-rw-r--r--neb/std/math.py31
1 files changed, 24 insertions, 7 deletions
diff --git a/neb/std/math.py b/neb/std/math.py
index 7fcaec7..f99d30f 100644
--- a/neb/std/math.py
+++ b/neb/std/math.py
@@ -8,18 +8,26 @@ def interpretLessThanEqual(symbol, args, env, ns):
return Bool(args[0].value <= args[1].value)
compare_arg = Arg("num", TypeEnum.NUMBER)
-MATH.register("<=", Builtin("<=", interpretLessThanEqual, [compare_arg, compare_arg], return_type=Type(":bool")))
+lte_func = Builtin("<=", interpretLessThanEqual, [compare_arg, compare_arg], return_type=Type(":bool"))
+lte_multi = MultiFunction("<=")
+lte_multi.register(lte_func)
+MATH.register("<=", lte_multi)
def interpretGreaterThan(symbol, args, env, ns):
return Bool(args[0].value > args[1].value)
-compare_arg = Arg("num", TypeEnum.NUMBER)
-MATH.register(">", Builtin(">", interpretGreaterThan, [compare_arg, compare_arg], return_type=Type(":bool")))
+gt_func = Builtin(">", interpretGreaterThan, [compare_arg, compare_arg], return_type=Type(":bool"))
+gt_multi = MultiFunction(">")
+gt_multi.register(gt_func)
+MATH.register(">", gt_multi)
def interpretGreaterThanEqual(symbol, args, env, ns):
return Bool(args[0].value >= args[1].value)
-MATH.register(">=", Builtin(">=", interpretGreaterThanEqual, [compare_arg, compare_arg], return_type=Type(":bool")))
+gte_func = Builtin(">=", interpretGreaterThanEqual, [compare_arg, compare_arg], return_type=Type(":bool"))
+gte_multi = MultiFunction(">=")
+gte_multi.register(gte_func)
+MATH.register(">=", gte_multi)
def interpretLessThan(symbol, args, env, ns):
return Bool(args[0].value < args[1].value)
@@ -71,7 +79,10 @@ def interpretMultiplication(symbol, args, env, ns):
return Int(res)
factor_arg = Arg("factor", TypeEnum.NUMBER)
-MATH.register("*", Builtin("*", interpretMultiplication, [factor_arg, factor_arg], factor_arg, Type(":number")))
+mult_func = Builtin("*", interpretMultiplication, [factor_arg, factor_arg], factor_arg, Type(":number"))
+mult_multi = MultiFunction("*")
+mult_multi.register(mult_func)
+MATH.register("*", mult_multi)
def interpretDivision(symbol, args, env, ns):
ret = args[0].value / args[1].value
@@ -80,9 +91,15 @@ def interpretDivision(symbol, args, env, ns):
else:
return Float(ret)
-MATH.register("/", Builtin("/", interpretDivision, [factor_arg, factor_arg], return_type=Type(":number")))
+div_func = Builtin("/", interpretDivision, [factor_arg, factor_arg], return_type=Type(":number"))
+div_multi = MultiFunction("/")
+div_multi.register(div_func)
+MATH.register("/", div_multi)
def interpretFloor(symbol, args, env, ns):
return Int(math.floor(args[0].value))
-MATH.register("floor", Builtin("floor", interpretFloor, [Arg("floor", TypeEnum.NUMBER)], return_type=Type(":int")))
+floor_func = Builtin("floor", interpretFloor, [Arg("floor", TypeEnum.NUMBER)], return_type=Type(":int"))
+floor_multi = MultiFunction("floor")
+floor_multi.register(floor_func)
+MATH.register("floor", floor_multi)