diff options
| author | mryouse | 2022-07-20 20:56:00 +0000 |
|---|---|---|
| committer | mryouse | 2022-07-20 20:56:00 +0000 |
| commit | c3ec685f06c0656c38196cc3b15af4e25acb38a2 (patch) | |
| tree | 88f2b062e9363ada8e92feeefc31cf742cb88770 /neb | |
| parent | 2541ae567a2aeffe1144c249b2ec1db0a34dedef (diff) | |
implement multifunc for math
Diffstat (limited to 'neb')
| -rw-r--r-- | neb/std/math.py | 31 |
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) |
