// Created on savesnippets.com ยท https://savesnippets.com/W5RMllcP7r7nNi 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 } }