From e6e29440563e33bb67e0ad51f9fb6c5c2c3fe809 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Thu, 7 Mar 2024 20:45:47 -0700 Subject: level one (applications prototype finished!) --- src/interpreter/interpreter.ts | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'src/interpreter/interpreter.ts') 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; +}; -- cgit v1.2.3-70-g09d2