Files
lambda/pkg/engine/normalorder/engine.go
2026-02-07 00:12:50 -05:00

43 lines
875 B
Go

// Package normalorder contains an engine that reduces a 'lambda.Expression'
// in the normal order.
package normalorder
import (
"git.maximhutz.com/max/lambda/pkg/engine"
"git.maximhutz.com/max/lambda/pkg/lambda"
)
type process struct {
expr lambda.Expression
}
func (e process) Get() (lambda.Expression, error) {
return e.expr, nil
}
func (e *process) Set(l lambda.Expression) error {
e.expr = l
return nil
}
func (e *process) Step(i int) bool {
for range i {
next, reduced := ReduceOnce(e.expr)
if !reduced {
return false
}
e.expr = next
}
return true
}
// NewProcess creates a new redution process.
func NewProcess(expression lambda.Expression) (engine.Process[lambda.Expression], error) {
return &process{expr: expression}, nil
}
var _ engine.Process[lambda.Expression] = (*process)(nil)
var _ engine.Engine[lambda.Expression] = NewProcess