feat: add De Bruijn index reduction engine
Closes #26 - Added -i flag to select interpreter (lambda or debruijn) - Created debruijn package with Expression interface - Variable contains index and optional label - Abstraction contains only body (no parameter) - Application structure remains similar - Implemented De Bruijn reduction without variable renaming - Shift operation handles index adjustments - Substitute replaces by index instead of name - Abstracted Engine into interface with two implementations - LambdaEngine: original named variable engine - DeBruijnEngine: new index-based engine - Added conversion functions between representations - LambdaToDeBruijn: converts named to indexed - DeBruijnToLambda: converts indexed back to named - SaccharineToDeBruijn: direct saccharine to De Bruijn - Updated main to switch engines based on -i flag - All test samples pass with both engines Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
12
pkg/convert/saccharine_to_debruijn.go
Normal file
12
pkg/convert/saccharine_to_debruijn.go
Normal file
@@ -0,0 +1,12 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"git.maximhutz.com/max/lambda/pkg/debruijn"
|
||||
"git.maximhutz.com/max/lambda/pkg/saccharine"
|
||||
)
|
||||
|
||||
// SaccharineToDeBruijn converts a saccharine expression directly to De Bruijn indices.
|
||||
func SaccharineToDeBruijn(expr saccharine.Expression) debruijn.Expression {
|
||||
lambdaExpr := SaccharineToLambda(expr)
|
||||
return LambdaToDeBruijn(lambdaExpr)
|
||||
}
|
||||
Reference in New Issue
Block a user