cl-interpret: let now returns bool

This makes debugging monumentally harder, but it's SO NEAT and instantly adds `if let`/`while let` and `let chaining`
This commit is contained in:
John 2025-05-18 11:47:13 -04:00
parent 6bb855cff7
commit 964917d2f0

View File

@ -345,9 +345,12 @@ impl Interpret for Let {
let Let { mutable: _, name, ty: _, init } = self; let Let { mutable: _, name, ty: _, init } = self;
match init.as_ref().map(|i| i.interpret(env)).transpose()? { match init.as_ref().map(|i| i.interpret(env)).transpose()? {
Some(value) => { Some(value) => {
for (name, value) in pattern::substitution(name, value)? { if let Ok(sub) = pattern::substitution(name, value) {
env.insert(*name, Some(value)); for (name, value) in sub {
} env.insert(*name, Some(value));
}
return Ok(ConValue::Bool(true));
};
} }
None => { None => {
for name in pattern::variables(name) { for name in pattern::variables(name) {
@ -355,7 +358,7 @@ impl Interpret for Let {
} }
} }
} }
Ok(ConValue::Empty) Ok(ConValue::Bool(false))
} }
} }