Implement set! resolves #3
This commit is contained in:
@@ -42,6 +42,17 @@ fn interpret_if(args: &Vec<Datum>, env: &mut Env) -> Datum {
|
||||
}
|
||||
}
|
||||
|
||||
fn interpret_set(args: &Vec<Datum>, env: &mut Env) -> Datum {
|
||||
match &args[1] {
|
||||
Symbol(_) => {
|
||||
let var = &args[1];
|
||||
let val = interpret(&args[2], env);
|
||||
environment::set_variable(var, val, env)
|
||||
}
|
||||
_ => panic!("INTERPRET-SET -- cannot set {:?}", args),
|
||||
}
|
||||
}
|
||||
|
||||
fn interpret_define(args: &Vec<Datum>, env: &mut Env) -> Datum {
|
||||
match &args[1] {
|
||||
Symbol(_) => {
|
||||
@@ -119,7 +130,7 @@ pub fn interpret(exp: &Datum, env: &mut Env) -> Datum {
|
||||
Unspecified => Unspecified,
|
||||
Symbol(_) => environment::lookup_variable_value(exp, env),
|
||||
List(v) if has_tag(v, "if") => interpret_if(v, env),
|
||||
List(v) if has_tag(v, "set!") => panic!("assignment-not-supported"),
|
||||
List(v) if has_tag(v, "set!") => interpret_set(v, env),
|
||||
List(v) if has_tag(v, "define") => interpret_define(v, env),
|
||||
List(v) if has_tag(v, "cond") => panic!("cond-not-supported"),
|
||||
List(v) if has_tag(v, "let") => panic!("let-not-supported"),
|
||||
|
||||
Reference in New Issue
Block a user