@@ -20,19 +20,19 @@ type (
2020 LongChunk struct {
2121 start , step int64
2222 count int
23- nthFn FnFunc1
2423 }
2524)
2625
2726var (
28- _ ISeq = (* LongRange )(nil )
29- _ Sequential = (* LongRange )(nil )
30- _ IReduce = (* LongRange )(nil )
31- _ IReduceInit = (* LongRange )(nil )
32- _ ASeq = (* LongRange )(nil )
33- _ IDrop = (* LongRange )(nil )
34- _ IChunkedSeq = (* LongRange )(nil )
35- _ Counted = (* LongRange )(nil )
27+ _ ISeq = (* LongRange )(nil )
28+ _ Sequential = (* LongRange )(nil )
29+ _ IReduce = (* LongRange )(nil )
30+ _ IReduceInit = (* LongRange )(nil )
31+ _ Int64StepReducible = (* LongRange )(nil )
32+ _ ASeq = (* LongRange )(nil )
33+ _ IDrop = (* LongRange )(nil )
34+ _ IChunkedSeq = (* LongRange )(nil )
35+ _ Counted = (* LongRange )(nil )
3636
3737 _ IChunk = (* LongChunk )(nil )
3838 _ IReduceInit = (* LongChunk )(nil )
@@ -236,6 +236,25 @@ func (r *LongRange) ReduceInit(f IFn, init any) any {
236236 return ret
237237}
238238
239+ func (r * LongRange ) ReduceInt64Steps (
240+ reducer Int64ReductionStepper ,
241+ initial int64 ,
242+ ) int64 {
243+ result := initial
244+ value := r .start
245+ for index := 0 ; index < r .count ; index ++ {
246+ var reduced bool
247+ result , reduced = reducer .ReduceInt64Step (result , value )
248+ if reduced {
249+ return result
250+ }
251+ if index + 1 < r .count {
252+ value += r .step
253+ }
254+ }
255+ return result
256+ }
257+
239258func (r * LongRange ) Drop (n int ) Sequential {
240259 if n < 0 {
241260 return r
@@ -251,13 +270,11 @@ func (r *LongRange) Drop(n int) Sequential {
251270// LongChunk
252271
253272func NewLongChunk (start , step int64 , count int ) * LongChunk {
254- chunk := & LongChunk {
273+ return & LongChunk {
255274 start : start ,
256275 step : step ,
257276 count : count ,
258277 }
259- chunk .nthFn = func (i any ) any { return chunk .Nth (MustAsInt (i )) }
260- return chunk
261278}
262279
263280func (c * LongChunk ) First () any {
@@ -282,7 +299,9 @@ func (c *LongChunk) Count() int {
282299func (c * LongChunk ) fieldOrMethod (name string ) (interface {}, bool ) {
283300 switch name {
284301 case "nth" , "Nth" :
285- return c .nthFn , true
302+ return FnFunc1 (func (i any ) any {
303+ return c .Nth (MustAsInt (i ))
304+ }), true
286305 case "nthDefault" , "NthDefault" :
287306 return FnFunc2 (func (i , notFound any ) any {
288307 return c .NthDefault (MustAsInt (i ), notFound )
0 commit comments