diff --git a/content/Rustでの評価文脈(環境)のRAIIっぽい実装.md b/content/Rustでの評価文脈(環境)のRAIIっぽい実装.md index dd9fbabb..84dfc971 100644 --- a/content/Rustでの評価文脈(環境)のRAIIっぽい実装.md +++ b/content/Rustでの評価文脈(環境)のRAIIっぽい実装.md @@ -64,6 +64,14 @@ impl<'a, T: Clone> Drop for EnvironmentT<'a, T> { ので、evalを相互再帰するヘルパー関数とかでこういう感じにした方が楽かも ```rust +fn lookup(env: &mut Vec<(String, Value)>, name: &String) -> Option { + let res = env + .iter() + .rev() + .filter(|(n, _v)| name == n) + .collect::>(); + res.get(0).map(|(_, v)| v.clone()) +} fn eval_with_new_env<'a>( e_meta: Box>, env: &'a mut Vec<(String, Value)>,