From 8c7ff22c9cce5478eb20046b7f5f649f529cdf95 Mon Sep 17 00:00:00 2001 From: mryouse Date: Fri, 29 Jul 2022 19:35:26 +0000 Subject: implement a :nil type, which is the empty list --- neb/std/types.py | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'neb/std/types.py') diff --git a/neb/std/types.py b/neb/std/types.py index 44906d8..20aa27a 100644 --- a/neb/std/types.py +++ b/neb/std/types.py @@ -174,12 +174,21 @@ istype_multi = MultiFunction("type?") istype_multi.register(istype_func) TYPES.register("type?", istype_multi) +def interpretIsNil(symbol, args, env, ns): + return Bool(isinstance(args[0], List) and len(args[0].args) == 0) + +isnil_func = Builtin("nil?", interpretIsNil, [Arg("arg", TypeEnum.ANY)], return_type=Type(":bool")) +isnil_multi = MultiFunction("nil?") +isnil_multi.register(isnil_func) +TYPES.register("nil?", isnil_multi) + # add types to env any_type = NebType(":any", None, interpretIsAny) literal_type = NebType(":literal", any_type, interpretIsLiteral) string_type = NebType(":string", literal_type, interpretIsString) #list_type = NebType(":list", any_type, interpretIsList) bracket_type = NebType(":[]", any_type, interpretIsList) +nil_type = NebType(":nil", bracket_type, interpretIsNil) brace_type = NebType(":{}", any_type, interpretIsNonEmptyList) bool_type = NebType(":bool", literal_type, interpretIsBool) number_type = NebType(":number", literal_type, interpretIsNumber) @@ -193,6 +202,7 @@ TYPES.register(":literal", literal_type) TYPES.register(":string", string_type) #TYPES.register(":list", list_type) TYPES.register(":[]", bracket_type) +TYPES.register(":nil", nil_type) TYPES.register(":{}", brace_type) TYPES.register(":bool", bool_type) TYPES.register(":number", number_type) -- cgit v1.2.3