From 313c044b4a878a425aaca6554576f5154ace8ff9 Mon Sep 17 00:00:00 2001 From: Joel Kronqvist Date: Wed, 6 Aug 2025 16:23:18 +0300 Subject: Implemented let-bindings --- src/sexp/mod.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/sexp/mod.rs') 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, } -- cgit v1.2.3