diff options
Diffstat (limited to 'src/interpreter/interpreter.ts')
-rw-r--r-- | src/interpreter/interpreter.ts | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/interpreter/interpreter.ts b/src/interpreter/interpreter.ts index 0b3ae34..4599c46 100644 --- a/src/interpreter/interpreter.ts +++ b/src/interpreter/interpreter.ts @@ -198,22 +198,6 @@ export const betaReduce = ( ); }; -export const interpret = (term: string): DebrujinifiedLambdaTerm => { - const ast = parse(term); - const symbolTable = new SymbolTable(); - const debrujined = debrujinify(ast, symbolTable); - - let prev = debrujined; - let next = betaReduce(prev); - - while (emitDebrujin(prev) !== emitDebrujin(next)) { - // alpha equivalence - prev = next; - next = betaReduce(prev); - } - return next; -}; - export const emitDebrujin = (term: DebrujinifiedLambdaTerm): string => { if ("index" in term) { return term.index.toString(); @@ -253,3 +237,22 @@ export const emitNamed = (term: DebrujinifiedLambdaTerm): string => { throw new InvalidLambdaTermError(`Invalid lambda term: ${term}`); }; + +export const interpret = ( + term: string, + symbolTable = new SymbolTable(), + allowUnderscores = false, +): DebrujinifiedLambdaTerm => { + const ast = parse(term, allowUnderscores); + const debrujined = debrujinify(ast, symbolTable); + + let prev = debrujined; + let next = betaReduce(prev); + + while (emitDebrujin(prev) !== emitDebrujin(next)) { + // alpha equivalence + prev = next; + next = betaReduce(prev); + } + return next; +}; |