From dadbf350405967c0bf967eed6686b02c2cf6a048 Mon Sep 17 00:00:00 2001 From: Akshay Date: Mon, 29 Mar 2021 12:12:46 +0530 Subject: more list primitives, add type_match macro --- src/lisp/expr.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/lisp/expr.rs') diff --git a/src/lisp/expr.rs b/src/lisp/expr.rs index 059113b..934bb4a 100644 --- a/src/lisp/expr.rs +++ b/src/lisp/expr.rs @@ -150,11 +150,13 @@ impl fmt::Display for LispExpr { LispExpr::Unit => write!(f, "()")?, LispExpr::Number(n) => write!(f, "{}", n)?, LispExpr::List(l) => { - for expr in l.iter() { - write!(f, " {} ", expr)? - } + write!( + f, + "({})", + &l.iter().map(|expr| format!("{}", expr)).collect::>()[..].join(" ") + )?; } - LispExpr::StringLit(s) => write!(f, "{}", s)?, + LispExpr::StringLit(s) => write!(f, "{:?}", s)?, LispExpr::Char(c) => write!(f, "{}", c)?, LispExpr::BoolLit(b) => { if *b { @@ -243,6 +245,7 @@ impl TryFrom for String { fn try_from(value: LispExpr) -> Result { match value { LispExpr::StringLit(i) => Ok(i), + LispExpr::Ident(i) => Ok(i), _ => Err(LispError::Eval(EvalError::TypeMismatch)), } } -- cgit v1.2.3