diff options
Diffstat (limited to 'src/sexp/mod.rs')
-rw-r--r-- | src/sexp/mod.rs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/sexp/mod.rs b/src/sexp/mod.rs index 4e3c11c..7aa517b 100644 --- a/src/sexp/mod.rs +++ b/src/sexp/mod.rs @@ -59,11 +59,19 @@ use SLeaf::*; impl SExp { + /// Quick test that lets are values + /// ```rust + /// use myslip::sexp::{SExp::*, SLeaf::*, util::*}; + /// assert!(scons(Let, scons(var("a"), scons(5, Nil))).is_value()) + /// ``` pub fn is_value(&self) -> bool { match self { SCons(a, b) => - (**a == Atom(Quote) || **a == Atom(Vector)) - && b.consists_of_values(), + SCons(a.clone(), b.clone()).check_let().is_some() || + ( + (**a == Atom(Quote) || **a == Atom(Vector)) + && b.consists_of_values() + ), Atom(Var(_)) => false, Atom(_) => true, } |