diff options
author | Joel Kronqvist <joel.kronqvist@iki.fi> | 2025-08-06 16:23:18 +0300 |
---|---|---|
committer | Joel Kronqvist <joel.kronqvist@iki.fi> | 2025-08-06 16:23:18 +0300 |
commit | 313c044b4a878a425aaca6554576f5154ace8ff9 (patch) | |
tree | 706bf5e34678622111a23c7045f667c1acbe7c6d /src/sexp/mod.rs | |
parent | 23b2028bdce46d02209fc2df70fc5468a8beffa8 (diff) | |
download | myslip-313c044b4a878a425aaca6554576f5154ace8ff9.tar.gz myslip-313c044b4a878a425aaca6554576f5154ace8ff9.zip |
Implemented let-bindings
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, } |