diff --git a/src/env/core.rs b/src/env/core.rs index 5212b9a..7272c52 100644 --- a/src/env/core.rs +++ b/src/env/core.rs @@ -300,6 +300,16 @@ pub(super) fn core() -> HashMap { }) }), ), + // Strings + ( + "str", + Node::NativeFunc(|_env, args| { + arg_count!(1, args.len()); + + let val = args[0].borrow(); + Ok(Node::String(val.to_string())) + }), + ), // IO ( "display", diff --git a/src/evaluator.rs b/src/evaluator.rs index a75142c..15be10f 100644 --- a/src/evaluator.rs +++ b/src/evaluator.rs @@ -156,6 +156,9 @@ mod test { #[case("(>= 2 1)", "true")] #[case("(>= 1 1)", "true")] #[case("(>= 1 2)", "false")] + // Strings + #[case("(str (+ 1 2))", "3")] + #[case("(str (list 1 2 3))", "(1 2 3)")] fn test_evaluator(#[case] input: &str, #[case] expected: &str) { let env = Environment::new(); let ast = parser::parse_str(input).unwrap();