aboutsummaryrefslogtreecommitdiff
path: root/src/lisp/prelude.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lisp/prelude.rs')
-rw-r--r--src/lisp/prelude.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/lisp/prelude.rs b/src/lisp/prelude.rs
index f5ff13a..e24ade5 100644
--- a/src/lisp/prelude.rs
+++ b/src/lisp/prelude.rs
@@ -437,5 +437,23 @@ pub fn new_env() -> Result<Environment, LispError> {
437 } 437 }
438 }); 438 });
439 439
440 primitive!(env, Arity::Exact(2), "range", |args, _| {
441 if type_match!(
442 args,
443 0 => LispExpr::Number(LispNumber::Integer(_)),
444 1 => LispExpr::Number(LispNumber::Integer(_)))
445 {
446 let lower = args[0].unwrap_number().unwrap_integer();
447 let upper = args[1].unwrap_number().unwrap_integer();
448 Ok(LispExpr::List(
449 (lower..upper)
450 .map(|i| LispExpr::Number(LispNumber::Integer(i)))
451 .collect::<Vec<_>>(),
452 ))
453 } else {
454 Err(EvalError::TypeMismatch.into())
455 }
456 });
457
440 Ok(env) 458 Ok(env)
441} 459}