aboutsummaryrefslogtreecommitdiff
path: root/src/sexp/mod.rs
diff options
context:
space:
mode:
authorJoel Kronqvist <joel.kronqvist@iki.fi>2025-07-30 17:48:11 +0300
committerJoel Kronqvist <joel.kronqvist@iki.fi>2025-07-30 17:48:11 +0300
commita4b09d523e0b500de29c08b32abc13af8e509299 (patch)
tree77e0bdfa5b39c0789e829e698846fb06becbf7e1 /src/sexp/mod.rs
parentd2d4d5cffdce0ce28e59732f56a771f8fc3431de (diff)
parentcd68a2880db1400ae09ce0df64994b2bae33a3c1 (diff)
downloadmyslip-a4b09d523e0b500de29c08b32abc13af8e509299.tar.gz
myslip-a4b09d523e0b500de29c08b32abc13af8e509299.zip
Merge work done on laptop to desktop computer
Merge branch 'devel' of ssh://cron4.fi/~/melisp into devel
Diffstat (limited to 'src/sexp/mod.rs')
-rw-r--r--src/sexp/mod.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/sexp/mod.rs b/src/sexp/mod.rs
index 020ba63..f6c50d7 100644
--- a/src/sexp/mod.rs
+++ b/src/sexp/mod.rs
@@ -32,3 +32,23 @@ pub enum SExp {
SCons(Box<SExp>, Box<SExp>),
Atom(SLeaf),
}
+
+use SExp::*;
+use SLeaf::*;
+
+impl SExp {
+ pub fn is_value(&self) -> bool {
+ match self {
+ SCons(a, _) => **a == Atom(Quote),
+ Atom(Var(_)) => false,
+ Atom(_) => true,
+ }
+ }
+
+ pub fn consists_of_values(&self) -> bool {
+ self.is_value() || match self {
+ SCons(a, b) if (*a).is_value() => b.consists_of_values(),
+ _ => false
+ }
+ }
+}