UNPKG

functionalscript

Version:

FunctionalScript is a purely functional subset of JavaScript

81 lines (80 loc) 2.02 kB
import { index3, index5 } from "../../function/compare/module.f.js"; const child = (item) => item[1][item[0]]; export const find = (c) => { const i3 = index3(c); const i5 = index5(c); const f = (tail) => (node) => { const append = index => { const first = [index, node]; return f({ first, tail })(child(first)); }; const done = index => ({ first: [index, node], tail }); switch (node.length) { case 1: { return done(i3(node[0])); } case 2: { return done(i5(node)); } case 3: { const i = i3(node[1]); switch (i) { case 0: case 2: { return append(i); } case 1: { return done(i); } } } case 5: { const i = i5([node[1], node[3]]); switch (i) { case 0: case 2: case 4: { return append(i); } case 1: case 3: { return done(i); } } } } }; return f(null); }; export const isFound = ([i]) => { switch (i) { case 1: case 3: { return true; } default: { return false; } } }; export const value = ([i, r]) => { switch (i) { case 1: { switch (r.length) { case 1: case 2: { return r[0]; } default: { return r[1]; } } } case 3: { return r.length === 2 ? r[1] : r[3]; } default: { return null; } } };