Matematicheskiye_obosnovani.../lab1/add/2B.js
2025-01-29 16:04:11 +03:00

23 lines
771 B
JavaScript

import { S2_0, S2_1 } from "../symbol/S2.js"
/**
* @param { symbol } a
* @param { symbol } b
* @param { boolean } carry
* @returns { [value: symbol, carry: boolean] }
*/
export function add2B(a, b, carry) {
switch (a) {
case S2_0: switch (b) {
case S2_0: return carry ? [S2_1, false] : [S2_0, false];
case S2_1: return carry ? [S2_0, true ] : [S2_1, false];
default: throw new Error("unexpected symbol");
}
case S2_1: switch (b) {
case S2_0: return carry ? [S2_0, true] : [S2_1, false];
case S2_1: return carry ? [S2_1, true] : [S2_0, true ];
default: throw new Error("unexpected symbol");
}
default: throw new Error("unexpected symbol");
}
}