package main
import (
"fmt"
"iter"
)
// Yield every Fibonacci up to (but not including) max
func Fib(max int) iter.Seq[int] {
return func(yield func(int) bool) {
a, b := 0, 1
for a < max {
if !yield(a) { return } // consumer broke out
a, b = b, a+b
}
}
}
// Pair-yielding version (Seq2)
func Enumerate[T any](s []T) iter.Seq2[int, T] {
return func(yield func(int, T) bool) {
for i, v := range s {
if !yield(i, v) { return }
}
}
}
func main() {
for n := range Fib(100) {
fmt.Print(n, " ") // 0 1 1 2 3 5 8 13 21 34 55 89
}
fmt.Println()
for i, name := range Enumerate([]string{"a", "b", "c"}) {
fmt.Printf("%d=%s ", i, name) // 0=a 1=b 2=c
}
}
Create a free account and build your private vault. Share publicly whenever you want.