package engine import ( "git.maximhutz.com/max/lambda/internal/config" "git.maximhutz.com/max/lambda/pkg/debruijn" "git.maximhutz.com/max/lambda/pkg/emitter" ) // A process for reducing one λ-expression using De Bruijn indices. type DeBruijnEngine struct { Config *config.Config Expression *debruijn.Expression emitter.Emitter } // NewDeBruijnEngine creates a new De Bruijn engine. func NewDeBruijnEngine(config *config.Config, expression interface{}) *DeBruijnEngine { expr := expression.(*debruijn.Expression) return &DeBruijnEngine{Config: config, Expression: expr} } // Run begins the reduction process. func (e *DeBruijnEngine) Run() { e.Emit("start") debruijn.ReduceAll(e.Expression, func() { e.Emit("step") }) e.Emit("end") } // GetResult returns the stringified result. func (e *DeBruijnEngine) GetResult() string { return debruijn.Stringify(*e.Expression) }