aboutsummaryrefslogtreecommitdiff
path: root/neb
diff options
context:
space:
mode:
authormryouse2022-08-02 02:17:48 +0000
committermryouse2022-08-02 02:17:48 +0000
commit7be86d495ca1fbfdd2881c970c2c8036f93469d0 (patch)
tree9ebc6ca28181b8e401384f65fc48444c638d0f47 /neb
parentee509e05746731b12afe64bfe34284b119f6b4ae (diff)
implement most for string/list, and reverse/last for string
Diffstat (limited to 'neb')
-rw-r--r--neb/std/lists.py8
-rw-r--r--neb/std/strings.py26
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)