// 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