From d81318333effaa25f2d65979a61fa272d460838c Mon Sep 17 00:00:00 2001 From: Dustin Swan Date: Sun, 1 Feb 2026 16:53:45 -0700 Subject: [PATCH] String & list concatenation --- src/interpreter.ts | 17 +++++++++++++++-- src/main.ts | 2 ++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/interpreter.ts b/src/interpreter.ts index 2706f25..86116d9 100644 --- a/src/interpreter.ts +++ b/src/interpreter.ts @@ -188,8 +188,21 @@ function evaluateBuiltIn(op: string, left: Value, right: Value): Value { return evaluate(right.body, callEnv); } - if (op === '&') - throw new Error('TODO Not implemented yet'); + if (op === '&') { + if (left.kind == 'list' && right.kind === 'list') { + return { + kind: 'list', + elements: [...left.elements, ...right.elements] + }; + } + + if (left.kind == 'string' && right.kind === 'string') { + return { + kind: 'string', + value: left.value + right.value + }; + } + } throw new Error(`Unknown built-in: ${op}`); } diff --git a/src/main.ts b/src/main.ts index 653f4cf..4be01f2 100644 --- a/src/main.ts +++ b/src/main.ts @@ -19,3 +19,5 @@ e('c = 5; { a = 3, b = c }'); e('rec = { a = 3, b = 5 }; rec.a'); e('rec = { a = 3, b = 5 }; rec{ a = 10 }'); e('add1 = (x \\ x + 1); 3 > add1'); +e('[1, 2] & [3, 4]'); +e('"abc" & "def"');