aboutsummaryrefslogtreecommitdiff
path: root/src/sexp/subst.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/sexp/subst.rs')
-rw-r--r--src/sexp/subst.rs21
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!();
+ }
+}