diff options
| -rw-r--r-- | neb/std/lists.py | 8 | ||||
| -rw-r--r-- | neb/std/strings.py | 26 |
2 files changed, 34 insertions, 0 deletions
diff --git a/neb/std/lists.py b/neb/std/lists.py index 9335c3d..ae5e56c 100644 --- a/neb/std/lists.py +++ b/neb/std/lists.py @@ -185,3 +185,11 @@ prepend_func = Builtin("prepend", interpretPrepend, [Arg("list", TypeEnum.LIST), prepend_multi = MultiFunction("prepend") prepend_multi.register(prepend_func) LISTS.register("prepend", prepend_multi) + +def interpretListMost(symbol, args, env, ns): + return List(args[0].args[:-1]) + +most_func = Builtin("most", interpretListMost, [Arg("list", TypeEnum.LIST)], return_type=Type(":list")) +most_multi = MultiFunction("most") +most_multi.register(most_func) +LISTS.register("most", most_multi) diff --git a/neb/std/strings.py b/neb/std/strings.py index 1d6d7e4..21bd0a3 100644 --- a/neb/std/strings.py +++ b/neb/std/strings.py @@ -93,3 +93,29 @@ ord_func = Builtin("ord", interpretOrd, [Arg("char", TypeEnum.STRING)], return_t ord_multi = MultiFunction("ord") ord_multi.register(ord_func) STRINGS.register("ord", ord_multi) + +def interpretStringReverse(symbol, args, env, ns): + return String(args[0].value[::-1]) + +string_reverse_func = Builtin("reverse", interpretStringReverse, [Arg("str", TypeEnum.STRING)], return_type=Type(":string")) +string_reverse_multi = MultiFunction("reverse") +string_reverse_multi.register(string_reverse_func) +STRINGS.register("reverse", string_reverse_multi) + +def interpretStringLast(symbol, args, env, ns): + if len(args[0].value) == 0: + raise InterpretPanic(symbol, "string is empty") + return String(args[0].value[-1]) + +string_last_func = Builtin("last", interpretStringLast, [Arg("string", TypeEnum.STRING)], return_type=Type(":string")) +string_last_multi = MultiFunction("last") +string_last_multi.register(string_last_func) +STRINGS.register("last", string_last_multi) + +def interpretStringMost(symbol, args, env, ns): + return String(args[0].value[:-1]) + +string_most_func = Builtin("most", interpretStringMost, [Arg("string", TypeEnum.STRING)], return_type=Type(":string")) +string_most_multi = MultiFunction("most") +string_most_multi.register(string_most_func) +STRINGS.register("most", string_most_multi) |
