15 lines
330 B
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
|
|
}
|
|
}
|