hclang
Version:
Homoiconic C: Programming without a Language
88 lines • 6.76 kB
JavaScript
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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