diff options
| author | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-10-13 09:18:10 +0200 |
|---|---|---|
| committer | Arnaud Bailly <arnaud@pankzsoft.com> | 2025-10-13 09:18:10 +0200 |
| commit | 21befc8c8ab2e91632f5341b4fa9425cf3c815ff (patch) | |
| tree | 1b55f35081c09b399eab347f724c0bfa5b4cf8c9 /lambda-calcul/rust/src/builtins.rs | |
| parent | e580a8e4f2d44e646c6861197ef0fcf55aaba1d6 (diff) | |
| download | lambda-nantes-21befc8c8ab2e91632f5341b4fa9425cf3c815ff.tar.gz | |
update from workshop 2bis
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, + } +} |
