diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2017-11-18 22:49:36 -0500 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2017-11-18 22:49:36 -0500 |
| commit | 7d0f50a771e081814af4a06e92812d0243df7fc4 (patch) | |
| tree | 36b034d281f3be39bf9b5b180d636de2dcc87f61 | |
| parent | fe899f96eddf032dea9822a72ceed2c9b2cf8539 (diff) | |
I'm going to need vectors for my target use case.
| -rw-r--r-- | actinide/types.py | 41 | ||||
| -rw-r--r-- | docs/security.rst | 2 |
2 files changed, 43 insertions, 0 deletions
diff --git a/actinide/types.py b/actinide/types.py index be58b0c..fd86757 100644 --- a/actinide/types.py +++ b/actinide/types.py @@ -227,6 +227,45 @@ def flatten(list): list = tail(list) return r +# ### Vectors + +@An.fn +def vector(*elems): + return b.list(elems) + +@An.fn +def vector_p(value): + return isinstance(value, b.list) + +@An.fn +def vector_to_list(value): + return list(*value) + +@An.fn +def list_to_vector(value): + return flatten(list) + +@An.fn +def vector_length(value): + return b.len(value) + +@An.fn +def vector_get(value, index): + return value[index] + +@An.fn +def vector_set(value, index, elem): + value[index] = elem + return value + +@An.fn +def vector_add(value, *elems): + value.extend(elems) + return value + +def display_vector(value, symbols): + return f"<vector: [{' '.join(display(elem, symbols) for elem in value)}]>" + # ### Procedures class ProcedureError(Exception): @@ -306,6 +345,8 @@ def display(value, symbols): return display_decimal(value) if procedure_p(value): return display_procedure(value, symbols) + if vector_p(value): + return display_vector(value, symbols) # Give up and use repr to avoid printing `None`. return repr(value) diff --git a/docs/security.rst b/docs/security.rst index 4a42a2d..027b0de 100644 --- a/docs/security.rst +++ b/docs/security.rst @@ -50,6 +50,8 @@ possible: * Python ``bool`` objects, used to represent Actinide booleans. +* Python ``list`` objects, used to represent Actinide vectors. + * The Python ``None`` constant, used to represent the empty list. The remaining built-in types are represented using classes: |
