From a3b256df988195da356930236b2ca1bfd0543bfc Mon Sep 17 00:00:00 2001 From: Judd Date: Mon, 20 Jan 2025 16:40:43 +0800 Subject: [PATCH 1/2] `foldl`: support openArray --- lib/pure/collections/sequtils.nim | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/pure/collections/sequtils.nim b/lib/pure/collections/sequtils.nim index 983d3101cb4cf..b3c8c2e9dae49 100644 --- a/lib/pure/collections/sequtils.nim +++ b/lib/pure/collections/sequtils.nim @@ -908,7 +908,7 @@ template foldl*(sequence, operation: untyped): untyped = multiplication = foldl(numbers, a * b) words = @["nim", "is", "cool"] concatenation = foldl(words, a & b) - procs = @["proc", "Is", "Also", "Fine"] + procs = ["proc", "Is", "Also", "Fine"] func foo(acc, cur: string): string = @@ -920,14 +920,13 @@ template foldl*(sequence, operation: untyped): untyped = assert concatenation == "nimiscool" assert foldl(procs, foo(a, b)) == "procIsAlsoFine" - let s = sequence - assert s.len > 0, "Can't fold empty sequences" - var result: typeof(s[0]) - result = s[0] - for i in 1.. 0, "Can't fold empty sequences" + var result: typeof(sequence[0]) + result = sequence[0] + for i in 1.. Date: Tue, 21 Jan 2025 17:10:46 +0800 Subject: [PATCH 2/2] fix for test cases --- lib/pure/collections/sequtils.nim | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/pure/collections/sequtils.nim b/lib/pure/collections/sequtils.nim index b3c8c2e9dae49..484d65a06f754 100644 --- a/lib/pure/collections/sequtils.nim +++ b/lib/pure/collections/sequtils.nim @@ -142,7 +142,7 @@ func concat*[T](seqs: varargs[seq[T]]): seq[T] = inc(i) func addUnique*[T](s: var seq[T], x: sink T) = - ## Adds `x` to the container `s` if it is not already present. + ## Adds `x` to the container `s` if it is not already present. ## Uses `==` to check if the item is already present. runnableExamples: var a = @[1, 2, 3] @@ -920,10 +920,10 @@ template foldl*(sequence, operation: untyped): untyped = assert concatenation == "nimiscool" assert foldl(procs, foo(a, b)) == "procIsAlsoFine" - assert sequence.len > 0, "Can't fold empty sequences" - var result: typeof(sequence[0]) - result = sequence[0] - for i in 1.. 0, "Can't fold empty sequences" + var result = sequence[0] + for i in 1.. 0, "Can't fold empty sequences" - var result = s[n - 1] + var result = sequence[n - 1] for i in countdown(n - 2, 0): let - a {.inject.} = s[i] + a {.inject.} = sequence[i] b {.inject.} = result result = operation result