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)
* Второй параметр не обязателен

Top