Introduce reducer.Reducer interface and update the engine to use abstract expr.Expression and reducer.Reducer types, enabling pluggable reduction strategies. - Add pkg/reducer/reducer.go with Reducer interface. - Add pkg/lambda/reducer.go with NormalOrderReducer implementation. - Update engine to accept expr.Expression and reducer.Reducer. - Update plugins to use expr.Expression directly (no pointer dereference). - Update main and tests to pass reducer to engine. Closes #30
16 lines
627 B
Go
16 lines
627 B
Go
// Package reducer provides the abstract Reducer interface for all expression
|
|
// reduction strategies.
|
|
package reducer
|
|
|
|
import "git.maximhutz.com/max/lambda/pkg/expr"
|
|
|
|
// Reducer defines the interface for expression reduction strategies.
|
|
// Different evaluation modes (normal order, applicative order, SKI combinators,
|
|
// etc.) implement this interface with their own reduction logic.
|
|
type Reducer interface {
|
|
// Reduce performs all reduction steps on the expression, calling onStep
|
|
// after each reduction.
|
|
// Returns the final reduced expression.
|
|
Reduce(e expr.Expression, onStep func(expr.Expression)) expr.Expression
|
|
}
|