UNPKG

hclang

Version:

Homoiconic C: Programming without a Language

88 lines 6.76 kB
import { Frame } from './frame.js'; import { FrameAtom } from './frame-atom.js'; import { NilContext } from './meta-frame.js'; export class FrameNumber extends FrameAtom { static for(digits) { const exists = FrameNumber.numbers[digits]; return exists || (FrameNumber.numbers[digits] = new FrameNumber(digits)); } constructor(source, meta = NilContext) { super(meta); this.data = parseInt(source, 10); } apply(argument, _parameter) { // repeatedly apply argument `this.data` times let result = Frame.nil; if ((argument instanceof FrameNumber)) { const value = this.data * argument.data; result = new FrameNumber(value.toString()); } else { this.range().forEach(() => { result = result.apply(argument, _parameter); }); } return result; } range() { return [...Array(this.data).keys()]; } string_start() { return FrameNumber.NUMBER_BEGIN.toString(); } ; canInclude(char) { return FrameNumber.NUMBER_CHAR.test(char); } toData() { return this.data; } /* * Math Operations */ add(right) { const value = this.data + right.data; return new FrameNumber(value.toString()); } subtract(right) { const value = this.data - right.data; return new FrameNumber(value.toString()); } multiply(right) { const value = this.data * right.data; return new FrameNumber(value.toString()); } divide(right) { const value = this.data / right.data; return new FrameNumber(value.toString()); } modulo(right) { const value = this.data % right.data; return new FrameNumber(value.toString()); } power(right) { const value = Math.pow(this.data, right.data); return new FrameNumber(value.toString()); } equals(right) { return this.data === right.data ? Frame.all : Frame.nil; } lessThan(right) { return this.data < right.data ? Frame.all : Frame.nil; } greaterThan(right) { return this.data > right.data ? Frame.all : Frame.nil; } lessThanOrEqual(right) { return this.data <= right.data ? Frame.all : Frame.nil; } greaterThanOrEqual(right) { return this.data >= right.data ? Frame.all : Frame.nil; } } FrameNumber.NUMBER_BEGIN = /[1-9]/; FrameNumber.NUMBER_CHAR = /\d/; // eslint-disable-next-line no-use-before-define FrameNumber.numbers = {}; ; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUtbnVtYmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ZyYW1lcy9mcmFtZS1udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFM0MsT0FBTyxFQUFXLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRXJELE1BQU0sT0FBTyxXQUFZLFNBQVEsU0FBUztJQUlqQyxNQUFNLENBQUMsR0FBRyxDQUFFLE1BQWM7UUFDL0IsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMxQyxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBTUQsWUFBYSxNQUFjLEVBQUUsT0FBZ0IsVUFBVTtRQUNyRCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVNLEtBQUssQ0FBRSxRQUFlLEVBQUUsVUFBaUI7UUFDOUMsOENBQThDO1FBQzlDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUE7UUFDdEIsSUFBSSxDQUFDLFFBQVEsWUFBWSxXQUFXLENBQUMsRUFBRTtZQUNyQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUE7WUFDdkMsTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1NBQzNDO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMs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