summaryrefslogtreecommitdiff
path: root/java/LCEvaluator.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/LCEvaluator.java')
-rw-r--r--java/LCEvaluator.java59
1 files changed, 0 insertions, 59 deletions
diff --git a/java/LCEvaluator.java b/java/LCEvaluator.java
deleted file mode 100644
index b0fe69b..0000000
--- a/java/LCEvaluator.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.lambdanantes.lcgoji;
-
-import org.lambdanantes.lcgoji.ast.Abs;
-import org.lambdanantes.lcgoji.ast.App;
-import org.lambdanantes.lcgoji.ast.Term;
-import org.lambdanantes.lcgoji.ast.Var;
-
-import static org.lambdanantes.lcgoji.ast.Abs.λ;
-import static org.lambdanantes.lcgoji.ast.App.apply;
-
-public class LCEvaluator {
-
- public static Term evaluate(Term term) {
- switch (term) {
- case Var var -> {
- return var;
- }
- case Abs abs -> {
- return abs;
- }
- case App app -> {
- switch (app.left) {
- case Abs abs -> {
- return substitute(abs.body, abs.arg, app.right);
- }
- case App _app -> {
- return app;
- }
- case Var _var -> {
- return app;
- }
- }
- }
- }
- }
-
- private static Term substitute(Term body, String arg, Term val) {
- switch (body) {
- case Var var -> {
- if (var.name.equals(arg)) {
- return val;
- } else {
- return body;
- }
- }
- case App app -> {
- return apply(substitute(app.left, arg, val), substitute(app.right, arg, val));
- }
- case Abs abs -> {
- if (abs.arg.equals(arg)) {
- // Pas de substitution des variables redéfinies
- return abs;
- } else {
- return λ(abs.arg, substitute(abs.body, arg, val));
- }
- }
- }
- }
-} \ No newline at end of file