summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2017-11-18 22:49:36 -0500
committerOwen Jacobson <owen@grimoire.ca>2017-11-18 22:49:36 -0500
commit7d0f50a771e081814af4a06e92812d0243df7fc4 (patch)
tree36b034d281f3be39bf9b5b180d636de2dcc87f61
parentfe899f96eddf032dea9822a72ceed2c9b2cf8539 (diff)
I'm going to need vectors for my target use case.
-rw-r--r--actinide/types.py41
-rw-r--r--docs/security.rst2
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: