diff options
Diffstat (limited to 'src/sexp/subst.rs')
-rw-r--r-- | src/sexp/subst.rs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/sexp/subst.rs b/src/sexp/subst.rs new file mode 100644 index 0000000..7cfa180 --- /dev/null +++ b/src/sexp/subst.rs @@ -0,0 +1,21 @@ + +use crate::sexp::{SExp, SExp::*, SLeaf::*, util::*}; + +impl SExp { + /// Performs substitution on the s-expression. + /// + /// Replaces all free occurrences of variables + /// named `name` with the given `value` + /// in this s-expression. + /// ```rust + /// 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"), scons(Sub, scons(2, 1)))) + /// ); + /// ``` + pub fn subst(self, name: &str, value: SExp) -> SExp { + todo!(); + } +} |