Files
lambda/pkg/lambda/is_free_variable.go

15 lines
330 B
Go

package lambda
func IsFreeVariable(n string, e Expression) bool {
switch e := e.(type) {
case *Variable:
return e.Value == n
case *Abstraction:
return e.Parameter != n && IsFreeVariable(n, e.Body)
case *Application:
return IsFreeVariable(n, e.Abstraction) || IsFreeVariable(n, e.Argument)
default:
return false
}
}