feat: reducer, but doesn`t work

This commit is contained in:
2025-12-25 00:30:15 -05:00
parent 2c3ce9baf7
commit d5999e8e1c
15 changed files with 228 additions and 150 deletions

View File

@@ -0,0 +1,20 @@
package lambda
import "git.maximhutz.com/max/lambda/pkg/set"
func GetFreeVariables(e Expression) set.Set[string] {
switch e := e.(type) {
case *Variable:
return set.New(e.Value)
case *Abstraction:
vars := GetFreeVariables(e.Body)
vars.Remove(e.Parameter)
return vars
case *Application:
vars := GetFreeVariables(e.Abstraction)
vars.Union(GetFreeVariables(e.Argument))
return vars
default:
return nil
}
}