Files
lambda/pkg/lambda/get_free_variables.go

21 lines
428 B
Go

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.Merge(GetFreeVariables(e.Argument))
return vars
default:
return nil
}
}