aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbnewbold <bnewbold@robocracy.org>2016-04-21 02:41:41 -0400
committerbnewbold <bnewbold@robocracy.org>2016-04-21 02:41:41 -0400
commit98e84b28a23f2b832409503c11f2065123746a89 (patch)
treea2d2f4074fec06ab42e64954ac68927f1d17453f
parent4d59c0b16604bab584498f2ef41f73ac3b6515ab (diff)
downloadspectrum-98e84b28a23f2b832409503c11f2065123746a89.tar.gz
spectrum-98e84b28a23f2b832409503c11f2065123746a89.zip
rust: more fiddling with procedure application lifetime warning
-rw-r--r--minimal.rs16
1 files changed, 5 insertions, 11 deletions
diff --git a/minimal.rs b/minimal.rs
index 876d164..0372124 100644
--- a/minimal.rs
+++ b/minimal.rs
@@ -368,8 +368,8 @@ fn apply_action<'a>(list: &'a Vec<SchemeExpr>, ctx: HashMap<&'a str, SchemeExpr<
match head {
SchemeExpr::SchemeProcedure(ref binds, ref body, ref proc_ctx) => {
// This block of code implements procedure (lambda) application
- if body.len() == 0 {
- return Err("prodedure must have non-empty body");
+ if body.len() != 1 {
+ return Err("prodedure must have single-expression body");
}
let mut closure = proc_ctx.clone();
if binds.len() != args.len() {
@@ -378,15 +378,9 @@ fn apply_action<'a>(list: &'a Vec<SchemeExpr>, ctx: HashMap<&'a str, SchemeExpr<
for (name, arg) in binds.iter().zip(args) {
closure.insert(name, arg);
}
- /* XXX: Almost Working...
- let mut ret = Ok(SchemeExpr::SchemeNull);
- for expr in body {
- //ret = Ok(scheme_meaning(&expr, closure.clone()).unwrap().clone());
- let thing = scheme_meaning(&expr, closure.clone()).unwrap();
- return Ok(thing);
- }
- return ret;
- */
+ let ret = &body[0].clone();
+ // XXX: Almost Working...
+ //return scheme_meaning(ret, closure.clone());
return Ok(SchemeExpr::SchemeNull);
},
_ => { return Err("non-procedure at head of expression"); },