aboutsummaryrefslogtreecommitdiff
path: root/src/sexp/mod.rs
diff options
context:
space:
mode:
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
+ }
+ }
+}