Work on interpreter

This commit is contained in:
2021-05-20 14:11:32 -04:00
parent 65444afe14
commit f4c58cfa02
3 changed files with 42 additions and 2 deletions

34
src/interpreter.rs Normal file
View File

@@ -0,0 +1,34 @@
use crate::parser::Datum;
use crate::parser::Datum::*;
fn add(args: Vec<Datum>) -> Datum {
Number(42)
}
fn lookup_variable_value(exp: Datum) -> Datum {
if let Symbol(string) = exp {
match string.as_str() {
"+" => Procedure(add),
_ => panic!("unbound-variable {:?}", string)
}
} else {
panic!("LOOKUP-VARIABLE-VALUE -- not-a-symbol {:?}", exp)
}
}
fn application(exp: Datum) -> Datum {
if let List(vector) = exp {
vector[0]
} else {
panic!("APPLICATION -- cannot-apply {:?}", exp)
}
}
pub fn interpret(exp: Datum) -> Datum {
match exp {
Boolean(_) | Number(_) => exp,
Symbol(_) => lookup_variable_value(exp),
List(_) => application(exp),
_ => panic!("unknown-expression {:?}", exp)
}
}