diff --git a/src/env/core.rs b/src/env/core.rs index b36c3f7..a6d1606 100644 --- a/src/env/core.rs +++ b/src/env/core.rs @@ -242,6 +242,11 @@ pub(super) fn core() -> HashMap { ( "if", Node::Special(|env, args| { + let mut args = args; + if args.len() == 2 { + args.push(Node::Nil) + } + arg_count!(3, args.len()); let mut args = args.into_iter(); diff --git a/src/evaluator.rs b/src/evaluator.rs index b79a418..fe8b79b 100644 --- a/src/evaluator.rs +++ b/src/evaluator.rs @@ -141,6 +141,8 @@ mod test { #[case("(if false true false)", "false")] #[case("(if 4 true false)", "true")] #[case("(if \"blue\" true false)", "true")] + #[case("(if true 3)", "3")] + #[case("(if false 3)", "()")] // Functions #[case("((fn* (a) a) 3)", "3")] #[case("((fn* (a) (+ a 2)) 1)", "3")]