diff options
Diffstat (limited to 'src/sexp/subst.rs')
-rw-r--r-- | src/sexp/subst.rs | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/sexp/subst.rs b/src/sexp/subst.rs index 7cfa180..abab614 100644 --- a/src/sexp/subst.rs +++ b/src/sexp/subst.rs @@ -11,11 +11,15 @@ impl SExp { /// use melisp::sexp::{SExp::*, SLeaf::*, util::*}; /// /// assert_eq!( - /// scons(Add, scons(var("a"), var("b"))).subst("b", scons(Sub, scons(2, 1))), + /// scons(Add, scons(var("a"), var("b"))).subst("b", &scons(Sub, scons(2, 1))), /// scons(Add, scons(var("a"), scons(Sub, scons(2, 1)))) /// ); /// ``` - pub fn subst(self, name: &str, value: SExp) -> SExp { - todo!(); + pub fn subst(self, name: &str, value: &SExp) -> SExp { + match self { + SCons(a, b) => scons((*a).subst(name, value), (*b).subst(name, value)), + Atom(Var(x)) if x == name => value.clone(), + t => t, + } } } |