From a0a3499633ecc52f95a3bd5261cba041527eb0be Mon Sep 17 00:00:00 2001 From: JohanWiltink Date: Thu, 10 Mar 2022 19:57:42 +0100 Subject: [PATCH] Parse _name in terms as undefined --- src/lambda-calculus.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/lambda-calculus.js b/src/lambda-calculus.js index 9cbbd27..20a9c87 100644 --- a/src/lambda-calculus.js +++ b/src/lambda-calculus.js @@ -232,7 +232,10 @@ function parse(code) { const r = name(i); if ( r ) { const [j,name] = r; - return [j,new V(name)]; + if ( name==="_" ) + return [j,new V("()")]; + else + return [j,new V(name)]; } else return null; } @@ -325,8 +328,10 @@ function evalLC(term) { let argEnv; if ( arg?.term && arg?.env ) ({ term: arg, env: argEnv } = arg); // if callback is passed another callback, or a term const termVal = new Tuple( typeof arg === 'number' ? fromInt(arg) : arg , new Env(argEnv) ); - if (term.name === "_") return runEval( new Tuple(term.body, new Env(env)), stack ); - return runEval( new Tuple(term.body, new Env(env).setThunk(term.name, termVal)), stack ); + if ( term.name==="_" ) + return runEval( new Tuple(term.body, new Env(env)), stack ); + else + return runEval( new Tuple(term.body, new Env(env).setThunk(term.name, termVal)), stack ); } return Object.assign( result, {term,env} ); }