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"');