diff options
author | Akshay <[email protected]> | 2021-03-31 12:21:41 +0100 |
---|---|---|
committer | Akshay <[email protected]> | 2021-03-31 12:21:41 +0100 |
commit | dbc0ab93141784dc07a7e193024fc5716dd34214 (patch) | |
tree | a25f5d43cde0931d387ec58f1877b282d8aa4daf /src/lisp/expr.rs | |
parent | 6e18888f652bbce37a2ef8a059bd9e187b83f6dd (diff) |
handle quoted objects better; add cond form
Diffstat (limited to 'src/lisp/expr.rs')
-rw-r--r-- | src/lisp/expr.rs | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/lisp/expr.rs b/src/lisp/expr.rs index 1f3e0fb..31476c9 100644 --- a/src/lisp/expr.rs +++ b/src/lisp/expr.rs | |||
@@ -3,7 +3,7 @@ use std::{cmp::PartialEq, convert::TryFrom, fmt}; | |||
3 | use crate::app::AppState; | 3 | use crate::app::AppState; |
4 | use crate::lisp::{ | 4 | use crate::lisp::{ |
5 | error::{EvalError, LispError}, | 5 | error::{EvalError, LispError}, |
6 | eval::{lookup, Evaluator}, | 6 | eval::lookup, |
7 | number::LispNumber, | 7 | number::LispNumber, |
8 | EnvList, | 8 | EnvList, |
9 | }; | 9 | }; |
@@ -18,7 +18,7 @@ pub enum Arity { | |||
18 | } | 18 | } |
19 | 19 | ||
20 | impl Arity { | 20 | impl Arity { |
21 | pub fn is_valid<T>(self, args: &[T]) -> bool { | 21 | pub fn check<T>(self, args: &[T]) -> bool { |
22 | match self { | 22 | match self { |
23 | Arity::Exact(a) => args.len() == a, | 23 | Arity::Exact(a) => args.len() == a, |
24 | Arity::Atleast(a) => args.len() >= a, | 24 | Arity::Atleast(a) => args.len() >= a, |
@@ -41,7 +41,7 @@ pub struct PrimitiveFunc { | |||
41 | 41 | ||
42 | impl PrimitiveFunc { | 42 | impl PrimitiveFunc { |
43 | pub fn call(&self, args: &[LispExpr], app: &mut AppState) -> Result<LispExpr, LispError> { | 43 | pub fn call(&self, args: &[LispExpr], app: &mut AppState) -> Result<LispExpr, LispError> { |
44 | if !self.arity.is_valid(args) { | 44 | if !self.arity.check(args) { |
45 | return Err(EvalError::ArgumentCount(self.arity).into()); | 45 | return Err(EvalError::ArgumentCount(self.arity).into()); |
46 | } | 46 | } |
47 | (self.closure)(args, app) | 47 | (self.closure)(args, app) |
@@ -226,7 +226,7 @@ impl fmt::Display for LispExpr { | |||
226 | } | 226 | } |
227 | LispExpr::Comma(val, depth) => write!(f, "{}{}", ",".repeat(*depth as usize), val)?, | 227 | LispExpr::Comma(val, depth) => write!(f, "{}{}", ",".repeat(*depth as usize), val)?, |
228 | LispExpr::CommaAt(val, depth) => write!(f, "{}@{}", ",".repeat(*depth as usize), val)?, | 228 | LispExpr::CommaAt(val, depth) => write!(f, "{}@{}", ",".repeat(*depth as usize), val)?, |
229 | LispExpr::Quote(val, depth) => write!(f, "{}{}", "'".repeat(*depth as usize), val)?, | 229 | LispExpr::Quote(val, depth) => write!(f, "{}{}", "'".repeat(*depth as usize - 1), val)?, |
230 | }; | 230 | }; |
231 | Ok(()) | 231 | Ok(()) |
232 | } | 232 | } |