12345678910111213141516171819 |
- const AST = require('./ast')
- const OsloError = require('./osloError')
-
- module.exports = {
- '+': (a, b) => new AST.Number({ value: a.value + b.value }),
- '-': (a, b) => new AST.Number({ value: a.value - b.value }),
- '*': (a, b) => new AST.Number({ value: a.value * b.value }),
- '/': (a, b) => new AST.Number({ value: a.value / b.value }),
- '=': (a, b) => new AST.Boolean({ value: a.value === b.value }),
- '>': (a, b) => new AST.Boolean({ value: a.value > b.value }),
- '<': (a, b) => new AST.Boolean({ value: a.value < b.value }),
- '>=': (a, b) => new AST.Boolean({ value: a.value >= b.value }),
- '<=': (a, b) => new AST.Boolean({ value: a.value <= b.value }),
- 'list': (...args) => { return new AST.List({ elements: args }) },
- 'length': xs => new AST.Number({ value: xs.elements.length }),
- 'cons': (x, xs) => new AST.List({ elements: [x, ...xs.elements] }),
- 'head': xs => xs.elements[0],
- 'tail': xs => new AST.List({ elements: xs.elements.slice(1) }),
- }
|