diff options
| author | mryouse | 2022-07-29 19:35:26 +0000 |
|---|---|---|
| committer | mryouse | 2022-07-29 19:35:26 +0000 |
| commit | 8c7ff22c9cce5478eb20046b7f5f649f529cdf95 (patch) | |
| tree | 842c4e79a0e2b05f52e89e556f39b3f8f6978eb7 | |
| parent | 82f5622dd6babf8d3984b694a3267aa3eae92d12 (diff) | |
implement a :nil type, which is the empty list
| -rw-r--r-- | neb/std/types.py | 10 | ||||
| -rw-r--r-- | neb/structs.py | 2 |
2 files changed, 11 insertions, 1 deletions
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) diff --git a/neb/structs.py b/neb/structs.py index 8c643b5..2423a69 100644 --- a/neb/structs.py +++ b/neb/structs.py @@ -121,7 +121,7 @@ class Type: else: return self.name -_native_types = ":any :literal :string :bool :number :int :float :[] :{} :handle :type" +_native_types = ":any :literal :string :bool :number :int :float :[] :nil :{} :handle :type" ALL_TYPES = {x: Type(x) for x in _native_types.split(" ")} class Symbol: |
