diff options
Diffstat (limited to 'lambda-calcul/rust/src/builtins.rs')
| -rw-r--r-- | lambda-calcul/rust/src/builtins.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lambda-calcul/rust/src/builtins.rs b/lambda-calcul/rust/src/builtins.rs new file mode 100644 index 0000000..7064c1c --- /dev/null +++ b/lambda-calcul/rust/src/builtins.rs @@ -0,0 +1,25 @@ +use crate::ast::Value; +use std::collections::HashMap; + +pub struct Builtins {} + +impl Builtins { + pub fn new() -> HashMap<String, Value> { + let mut map = HashMap::new(); + map.insert("+".to_string(), Value::Prim("+".to_string())); + map + } +} + +pub fn plus(v: Value) -> Value { + match v { + Num(i) => Lam(gensym(), + } +} + +pub fn builtins(sym: &String) -> Option<Box<dyn Fn(Value) -> Value>> { + match sym.as_str() { + "+" => Some(Box::new(plus)), + _ => None, + } +} |
