From 1d16187846ecb639b007cf5425f5469be49a0544 Mon Sep 17 00:00:00 2001 From: Roman Godmaire Date: Sat, 17 Feb 2024 07:07:04 -0500 Subject: [PATCH] fix: support truthy values In scheme, everything except false is considered truthy. --- src/evaluator/env.rs | 8 ++++---- src/evaluator/mod.rs | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/evaluator/env.rs b/src/evaluator/env.rs index c4070a5..91289eb 100644 --- a/src/evaluator/env.rs +++ b/src/evaluator/env.rs @@ -166,12 +166,12 @@ pub fn core_environment() -> Rc { let (cond, consequence, alternative) = (args[0].clone(), args[1].clone(), args[2].clone()); - // If the value is anything other than true or nil, then we return the alternative - if *cond == Expression::Boolean(true) || *cond == Expression::Nil { - return Ok(consequence); + // If the value is anything other than false, then it is truthy + if *cond == Expression::Boolean(false) { + return Ok(alternative); }; - Ok(alternative) + Ok(consequence) }), ), // Environment Manipulation diff --git a/src/evaluator/mod.rs b/src/evaluator/mod.rs index bc4d553..f9daf24 100644 --- a/src/evaluator/mod.rs +++ b/src/evaluator/mod.rs @@ -213,8 +213,8 @@ mod test { #[case("(if true true false)", "true")] #[case("(if nil true false)", "true")] #[case("(if false true false)", "false")] - #[case("(if 4 true false)", "false")] - #[case("(if \"blue\" true false)", "false")] + #[case("(if 4 true false)", "true")] + #[case("(if \"blue\" true false)", "true")] // Functions #[case("((fn* (a) a) 3)", "3")] #[case("((fn* (a) (+ a 2)) 1)", "3")]