diff --git a/src/interpreter.ts b/src/interpreter.ts index c2b4d9d..ea319ec 100644 --- a/src/interpreter.ts +++ b/src/interpreter.ts @@ -69,8 +69,12 @@ export function evaluate(ast: AST, env: Env): Value { }; case 'let': { - const val = evaluate(ast.value, env); - const newEnv = new Map(env).set(ast.name, val); + const newEnv = new Map(env); + + const val = evaluate(ast.value, newEnv); + + newEnv.set(ast.name, val); + return evaluate(ast.body, newEnv); } diff --git a/src/main.ts b/src/main.ts index 0703c19..b94d137 100644 --- a/src/main.ts +++ b/src/main.ts @@ -31,3 +31,9 @@ e('"abc" & "def"'); e('n = 5; n | 5 \\ "five" | _ \\ "other"'); e('list = [1, 2, 3]; list | [x, y, z] \\ x + y + z'); e('point = {x = 5, y = 10}; point | {x = px, y = py} \\ px + py'); + +e(`factorial = n \\ n + | 0 \\ 1 + | n \\ n * factorial (n - 1); + + factorial 5`)