feat: display function

This commit is contained in:
Roman Godmaire 2024-02-17 21:14:31 -05:00
parent ad66e839fa
commit 519fa4ee99
2 changed files with 15 additions and 0 deletions

View file

@ -253,6 +253,19 @@ pub fn core_environment() -> Rc<Environment> {
})) }))
}), }),
), ),
// IO
(
"display",
Expression::NativeFunc(|args| {
if args.len() != 1 {
Err(Error::MismatchedArgCount(1, args.len()))?
}
print!("{}", args[0]);
Ok(Expression::Void.into())
}),
),
] ]
.into_iter() .into_iter()
.map(|(k, v)| (k.to_string(), Rc::new(v))); .map(|(k, v)| (k.to_string(), Rc::new(v)));

View file

@ -16,6 +16,7 @@ pub enum Expression {
Keyword(String), Keyword(String),
String(String), String(String),
Nil, Nil,
Void,
// Collections // Collections
Vector(Vec<Rc<Expression>>), Vector(Vec<Rc<Expression>>),
@ -39,6 +40,7 @@ impl std::fmt::Display for Expression {
Expression::Keyword(val) => write!(f, ":{}", val), Expression::Keyword(val) => write!(f, ":{}", val),
Expression::String(val) => write!(f, "{}", val), Expression::String(val) => write!(f, "{}", val),
Expression::Nil => write!(f, "()"), Expression::Nil => write!(f, "()"),
Expression::Void => write!(f, ""),
Expression::Vector(vec) => { Expression::Vector(vec) => {
let s = vec let s = vec