aboutsummaryrefslogtreecommitdiff
path: root/src/sexp/step.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/sexp/step.rs')
-rw-r--r--src/sexp/step.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/sexp/step.rs b/src/sexp/step.rs
index 9077401..59b201c 100644
--- a/src/sexp/step.rs
+++ b/src/sexp/step.rs
@@ -441,6 +441,27 @@ impl SExp {
},
+ // Concatenation
+ SCons(op, l) if *op == Atom(Concat) => {
+ let ls = l.parts();
+ let firstvec = ls.get(0).unwrap();
+ let secondvec = ls.get(1).unwrap();
+ let firstvec = match firstvec {
+ SCons(a, b) if **a == Atom(Vector) => *b.clone(),
+ t => t.clone(),
+ };
+ let secondvec = match secondvec {
+ SCons(a, b) if **a == Atom(Vector) => *b.clone(),
+ t => t.clone(),
+ };
+ let mut res = Atom(Nil);
+ for exp in firstvec.parts().into_iter().chain(secondvec.parts()).rev() {
+ res = scons(exp, res);
+ }
+ Ok(scons(Vector, res))
+ },
+
+
// Arithmetic