aboutsummaryrefslogtreecommitdiff
path: root/src/lisp/mod.rs
diff options
context:
space:
mode:
authorAkshay <[email protected]>2021-03-20 16:04:44 +0000
committerAkshay <[email protected]>2021-03-20 16:04:44 +0000
commit07432dabd3fbc7fcaaec01d50f4036868dca88dd (patch)
tree10549e64b5e6221305af96d6be6b85737af7a48d /src/lisp/mod.rs
parentae79d5a8b0166d43d3ff48aa593db6038b40410b (diff)
factor out types into expr.rs
Diffstat (limited to 'src/lisp/mod.rs')
-rw-r--r--src/lisp/mod.rs43
1 files changed, 3 insertions, 40 deletions
diff --git a/src/lisp/mod.rs b/src/lisp/mod.rs
index 5d8965f..b863bba 100644
--- a/src/lisp/mod.rs
+++ b/src/lisp/mod.rs
@@ -1,46 +1,9 @@
1use std::fmt;
2
3use number::LispNumber;
4
5mod error; 1mod error;
2mod expr;
6mod lex; 3mod lex;
7mod number; 4mod number;
5mod parse;
8 6
9#[derive(Debug, PartialEq)] 7use expr::LispExpr;
10pub enum LispExpr {
11 Number(LispNumber),
12 List(Vec<LispExpr>),
13 StringLit(String),
14 BoolLit(bool),
15 Ident(String),
16 Function(LispFunction),
17}
18
19impl fmt::Display for LispExpr {
20 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21 match self {
22 LispExpr::Number(n) => write!(f, "{}", n)?,
23 LispExpr::List(l) => {
24 for expr in l.iter() {
25 write!(f, " {} ", expr)?
26 }
27 }
28 LispExpr::StringLit(s) => write!(f, "{:?}", s)?,
29 LispExpr::BoolLit(b) => {
30 if *b {
31 write!(f, "#t")?
32 } else {
33 write!(f, "#f")?
34 }
35 }
36 LispExpr::Ident(s) => write!(f, "{}", s)?,
37 LispExpr::Function(_) => write!(f, "<#procedure>")?,
38 };
39 Ok(())
40 }
41}
42 8
43pub type Environment = Vec<(String, LispExpr)>; 9pub type Environment = Vec<(String, LispExpr)>;
44
45#[derive(Debug, PartialEq)]
46struct LispFunction {}