From d90cae3651c474e61588d5c111b62c981c6a2688 Mon Sep 17 00:00:00 2001 From: Matthieu Jolimaitre Date: Tue, 8 Oct 2024 12:15:58 +0200 Subject: [PATCH] added filling and reduction to iterators --- src/lib.ts | 2 +- src/lib/iter.ts | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/lib.ts b/src/lib.ts index 102cc4e..a8025c9 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -2,7 +2,7 @@ export type { Arr, ClassOf, Constructible, Function, InstanceOf, KeyOfType, Tail } from "./lib/types.ts"; // functions -export { all, chunk, enumerate, filter, filter_map, it, Iter, map, window, zip } from "./lib/iter.ts"; +export { all, chunk, enumerate, fill, filter, filter_map, fold, it, Iter, map, window, zip } from "./lib/iter.ts"; export { log_from, next, split_promise, wait } from "./lib/utils.ts"; // Structures diff --git a/src/lib/iter.ts b/src/lib/iter.ts index 5fceb58..48b228a 100644 --- a/src/lib/iter.ts +++ b/src/lib/iter.ts @@ -67,6 +67,16 @@ export function* window(iter: Iterable, size: number, incomplete = false): } } +export function* fill(iter: Iterable, value: O) { + for (const _item of iter) yield value; +} + +export function fold(iter: Iterable, init: O, reduction: (item: I, acc: O) => O) { + let accumulator = init; + for (const item of iter) accumulator = reduction(item, accumulator); + return accumulator; +} + export class Iter { iter; [Symbol.iterator] = () => this.iter[Symbol.iterator](); @@ -121,6 +131,14 @@ export class Iter { all(predicate: (item: T) => boolean) { return all(this, predicate); } + + fill(value: O) { + return fill(this, value); + } + + fold(init: O, reduction: (item: T, acc: O) => O) { + return fold(this, init, reduction); + } } Deno.test("test_comon", async () => {