ksi
Язык программирования
Функция-генератор
Генератор используется для выдачи ряда значений. Результат вызова генератора можно обработать циклом .each
Напишем программу, которая будет считать за сколько шагов человек пройдёт заданное расстояние, при том что длинна шага варьируется случайным образом в заданном диапазоне. На каждом шаге будем показывать сколько уже пройдено и ширину шага.
@main
walk = .fn (step_range, distance) .gen (
.var amount = 0, step
.loop (
step = step_range random_float@std{}
(amount += step)
.yield(amount, step)
(amount > distance) .then ( .end_gen )
)
)
.do (
.var it, last_step
-- Пройти 5 метров с шагом от 30 до 50 см
$range(0.3, 0.5) walk{5}
.each it (
"Пройдено: %{it.val} м" write@std{}
last_step = it.key*100 $int{}
", шагнули на %{last_step} см"
write_line@std{}
)
"Число шагов: %{it.pos}" write_line@std{}
)
Генератор результатов ~ .gen
Конец выдачи ~ .end_gen
Передать результат ~ .yield(val, key)
* Второй параметр не обязателен