diff options
author | Joel Kronqvist <joel.kronqvist@iki.fi> | 2025-08-03 13:07:36 +0300 |
---|---|---|
committer | Joel Kronqvist <joel.kronqvist@iki.fi> | 2025-08-03 13:07:36 +0300 |
commit | 00cf7eb0a1316ce0e330ed9a1e218fc60ae0b8cd (patch) | |
tree | 24aca27976b8442ee37eb7b40d5df950a7b5d39a /src/sexp | |
parent | 9121a0b782d2cd6551a393f1d3a79c7b092e4873 (diff) | |
download | myslip-00cf7eb0a1316ce0e330ed9a1e218fc60ae0b8cd.tar.gz myslip-00cf7eb0a1316ce0e330ed9a1e218fc60ae0b8cd.zip |
Implemented type_check, added method parts for SExp
'parts' is different from 'into_vec', because it doesn't require flat structure and always succeeds
Diffstat (limited to 'src/sexp')
-rw-r--r-- | src/sexp/util.rs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/sexp/util.rs b/src/sexp/util.rs index 70ac152..0818e6b 100644 --- a/src/sexp/util.rs +++ b/src/sexp/util.rs @@ -58,4 +58,16 @@ impl SExp { _ => Err("expected list, found atom".to_string()), } } + + pub fn parts(self) -> Vec<SExp> { + match self { + Atom(x) => vec![Atom(x)], + SCons(a, b) if *b == Atom(Nil) => vec![*a], + SCons(a, b) => { + let mut res = vec![*a]; + res.extend_from_slice(&(*b).parts()); + res + }, + } + } } |