feat(core): improve printing
- Expression Conversion - print/println
This commit is contained in:
parent
ad0792dcd3
commit
88bbcf036f
@ -198,6 +198,34 @@ impl From<(Expression, Expression)> for Expression {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<i64> for Expression {
|
||||
fn from(value: i64) -> Self {
|
||||
Expression::Integer(value)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<f64> for Expression {
|
||||
fn from(value: f64) -> Self {
|
||||
Expression::Float(value)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<String> for Expression {
|
||||
fn from(value: String) -> Self {
|
||||
Expression::String(value)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<bool> for Expression {
|
||||
fn from(value: bool) -> Self {
|
||||
if value {
|
||||
Expression::True
|
||||
} else {
|
||||
Expression::Nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<Expression> for i64 {
|
||||
type Error = EvalError;
|
||||
fn try_from(value: Expression) -> Result<i64, Self::Error> {
|
||||
@ -321,7 +349,7 @@ impl Display for Expression {
|
||||
Expression::Symbol(s) => write!(f, "{}", s),
|
||||
Expression::Integer(i) => write!(f, "{}", i),
|
||||
Expression::Float(fl) => write!(f, "{}", fl),
|
||||
Expression::String(s) => write!(f, "\"{}\"", s),
|
||||
Expression::String(s) => write!(f, "{}", s),
|
||||
Expression::True => write!(f, "true"),
|
||||
Expression::Nil => write!(f, "nil"),
|
||||
}
|
||||
|
||||
@ -213,10 +213,17 @@ pub fn prelude_set(env: &Environment, expr: Expression) -> Result<Expression, Ev
|
||||
}
|
||||
}
|
||||
|
||||
pub fn prelude_println(env: &Environment, expr: Expression) -> Result<Expression, EvalError> {
|
||||
let [e] = expr.try_into()?;
|
||||
let e = eval(env, e)?;
|
||||
println!("{}", e);
|
||||
Ok(e)
|
||||
}
|
||||
|
||||
pub fn prelude_print(env: &Environment, expr: Expression) -> Result<Expression, EvalError> {
|
||||
let [e] = expr.try_into()?;
|
||||
let e = eval(env, e)?;
|
||||
println!("Prelude: {}", e);
|
||||
print!("{}", e);
|
||||
Ok(e)
|
||||
}
|
||||
|
||||
@ -270,6 +277,7 @@ pub fn mk_prelude(layer: &mut EnvironmentLayer) {
|
||||
layer.set("not".to_string(), Expression::Function(prelude_not));
|
||||
layer.set("let".to_string(), Expression::Function(prelude_let));
|
||||
layer.set("set".to_string(), Expression::Function(prelude_set));
|
||||
layer.set("println".to_string(), Expression::Function(prelude_println));
|
||||
layer.set("print".to_string(), Expression::Function(prelude_print));
|
||||
layer.set("cons".to_string(), Expression::Function(prelude_cons));
|
||||
layer.set("car".to_string(), Expression::Function(prelude_car));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user