UNPKG

js-slang

Version:

Javascript-based implementations of Source, written in Typescript

86 lines 2.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.reduce_right = exports.reduce = exports.fold_right = exports.fold = exports.filter = exports.dotted_listQ = void 0; const scheme_base_1 = require("./scheme-base"); let dotted_listQ = function (list) { if (list === null) { return false; } else if ((0, scheme_base_1.cdr)(list) === null) { return false; } else if ((0, scheme_base_1.pairQ)((0, scheme_base_1.cdr)(list))) { return (0, exports.dotted_listQ)((0, scheme_base_1.cdr)(list)); } else { return true; } }; exports.dotted_listQ = dotted_listQ; let filter = function (predicate, list) { if (list === null) { return null; } else if (predicate((0, scheme_base_1.car)(list))) { return (0, scheme_base_1.cons)((0, scheme_base_1.car)(list), (0, exports.filter)(predicate, (0, scheme_base_1.cdr)(list))); } else { return (0, exports.filter)(predicate, (0, scheme_base_1.cdr)(list)); } }; exports.filter = filter; let fold = function (f, init, ...lists) { if (lists.length === 0) { return init; } if (f.length !== lists.length + 1) { throw new Error(`Wrong number of arguments to accumulator: expected ${lists.length + 1}, got ${f.length}`); } if (lists.some(list => list === null)) { return init; } else { return (0, exports.fold)(f, f(init, ...lists.map(list => (0, scheme_base_1.car)(list))), ...lists.map(list => (0, scheme_base_1.cdr)(list))); } }; exports.fold = fold; let fold_right = function (f, init, ...lists) { if (lists.length === 0) { return init; } if (f.length !== lists.length + 1) { throw new Error(`Wrong number of arguments to accumulator: expected ${lists.length + 1}, got ${f.length}`); } if (lists.some(list => list === null)) { return init; } else { return f(...lists.map(list => (0, scheme_base_1.car)(list)), (0, exports.fold_right)(f, init, ...lists.map(list => (0, scheme_base_1.cdr)(list)))); } }; exports.fold_right = fold_right; let reduce = function (f, rIdentity, list) { if (list === null) { return rIdentity; } if (f.length !== 2) { throw new Error(`Wrong number of arguments to accumulator: expected 2 got ${f.length}`); } else { return (0, exports.fold)(f, rIdentity, list); } }; exports.reduce = reduce; let reduce_right = function (f, rIdentity, list) { if (list === null) { return rIdentity; } if (f.length !== 2) { throw new Error(`Wrong number of arguments to accumulator: expected 2, got ${f.length}`); } else { return (0, exports.fold_right)(f, rIdentity, list); } }; exports.reduce_right = reduce_right; //# sourceMappingURL=scheme-list.js.map