Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpIrCu 99 of 280 menu
◀ ▶

Своя последовательность в Go

Свою последовательность пишут функцией, которая возвращает функцию шага. Внешняя часть может принимать параметры, например стартовое число, а внутренняя в цикле зовет yield с очередным значением.

Так удобно описывать обратный счет, диапазон с шагом или любой порядок, который не хранят отдельным срезом. Итератор сам решает, когда закончить, проверяя ответ шага после каждого значения.

На экране строки 4, 3, 2 и 1. Внутренний цикл уменьшает i и после каждого шага смотрит, вернул ли yield истину.

Сделаем обратный счет от заданного числа до 1:

package main import "fmt" func CountDown(n int) func(func(int) bool) { return func(yield func(int) bool) { for i := n; i > 0; i-- { if !yield(i) { return } } } } func main() { for v := range CountDown(4) { fmt.Println(v) } }

Дано число:

start := 3

Напишите итератор обратного счета от start до 1 и выведите все значения через цикл перебора.

Дан следующий код:

func Twice(n int) func(func(int) bool) { return func(yield func(int) bool) { yield(n) yield(n) } }

Скажите, сколько раз шаг получит одно и то же число при переборе этой последовательности.

Дано число:

limit := 5

Опишите итератор, который отдает целые от 1 до limit включительно, и выведите их.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить