diff --git a/pkg/lambda/expression.go b/pkg/lambda/expression.go index affaf54..f34b3b4 100644 --- a/pkg/lambda/expression.go +++ b/pkg/lambda/expression.go @@ -30,12 +30,12 @@ func NewAbstraction(parameter string, body Expression) *Abstraction { /** ------------------------------------------------------------------------- */ type Application struct { - function Expression - argument Expression + abstraction Expression + argument Expression } -func (a *Application) Function() Expression { - return a.function +func (a *Application) Abstraction() Expression { + return a.abstraction } func (a *Application) Argument() Expression { @@ -46,8 +46,8 @@ func (a *Application) Accept(v Visitor) { v.VisitApplication(a) } -func NewApplication(function Expression, argument Expression) *Application { - return &Application{function: function, argument: argument} +func NewApplication(abstraction Expression, argument Expression) *Application { + return &Application{abstraction: abstraction, argument: argument} } /** ------------------------------------------------------------------------- */ diff --git a/pkg/lambda/get_free_variables.go b/pkg/lambda/get_free_variables.go index 72f39ac..1615aac 100644 --- a/pkg/lambda/get_free_variables.go +++ b/pkg/lambda/get_free_variables.go @@ -11,7 +11,7 @@ func GetFreeVariables(e Expression) *set.Set[string] { vars.Remove(e.parameter) return vars case *Application: - vars := GetFreeVariables(e.function) + vars := GetFreeVariables(e.abstraction) vars.Merge(GetFreeVariables(e.argument)) return vars default: diff --git a/pkg/lambda/is_free_variable.go b/pkg/lambda/is_free_variable.go index 2aff5d4..abc9b4b 100644 --- a/pkg/lambda/is_free_variable.go +++ b/pkg/lambda/is_free_variable.go @@ -7,7 +7,7 @@ func IsFreeVariable(n string, e Expression) bool { case *Abstraction: return e.parameter != n && IsFreeVariable(n, e.body) case *Application: - return IsFreeVariable(n, e.function) || IsFreeVariable(n, e.argument) + return IsFreeVariable(n, e.abstraction) || IsFreeVariable(n, e.argument) default: return false } diff --git a/pkg/lambda/reduce.go b/pkg/lambda/reduce.go index 74deba2..55d366a 100644 --- a/pkg/lambda/reduce.go +++ b/pkg/lambda/reduce.go @@ -12,14 +12,14 @@ func ReduceOnce(e *Expression) bool { case *Abstraction: stack.Push(&typed.body) case *Application: - if fn, fnOk := typed.function.(*Abstraction); fnOk { + if fn, fnOk := typed.abstraction.(*Abstraction); fnOk { reduced := Substitute(fn.body, fn.parameter, typed.argument) *top = reduced return true } stack.Push(&typed.argument) - stack.Push(&typed.function) + stack.Push(&typed.abstraction) } } diff --git a/pkg/lambda/rename.go b/pkg/lambda/rename.go index 7a52796..bc5625c 100644 --- a/pkg/lambda/rename.go +++ b/pkg/lambda/rename.go @@ -23,14 +23,14 @@ func Rename(expr Expression, target string, newName string) Expression { return NewAbstraction(newParam, newBody) case *Application: - newFunc := Rename(e.function, target, newName) + newAbs := Rename(e.abstraction, target, newName) newArg := Rename(e.argument, target, newName) - if newFunc == e.function && newArg == e.argument { + if newAbs == e.abstraction && newArg == e.argument { return e } - return NewApplication(newFunc, newArg) + return NewApplication(newAbs, newArg) default: return expr diff --git a/pkg/lambda/stringify.go b/pkg/lambda/stringify.go index 0769ed6..1d838b2 100644 --- a/pkg/lambda/stringify.go +++ b/pkg/lambda/stringify.go @@ -19,7 +19,7 @@ func (v *stringifyVisitor) VisitAbstraction(f *Abstraction) { func (v *stringifyVisitor) VisitApplication(c *Application) { v.builder.WriteRune('(') - c.function.Accept(v) + c.abstraction.Accept(v) v.builder.WriteRune(' ') c.argument.Accept(v) v.builder.WriteRune(')') diff --git a/pkg/lambda/substitute.go b/pkg/lambda/substitute.go index b89f8e0..fcfb043 100644 --- a/pkg/lambda/substitute.go +++ b/pkg/lambda/substitute.go @@ -31,14 +31,14 @@ func Substitute(expr Expression, target string, replacement Expression) Expressi return NewAbstraction(param, newBody) case *Application: - newFunc := Substitute(e.function, target, replacement) + newAbs := Substitute(e.abstraction, target, replacement) newArg := Substitute(e.argument, target, replacement) - if newFunc == e.function && newArg == e.argument { + if newAbs == e.abstraction && newArg == e.argument { return e } - return NewApplication(newFunc, newArg) + return NewApplication(newAbs, newArg) default: return expr