Есть ли способ вызывать функцию несколько раз, пока не будет собрано определенное количество результатов с определенными атрибутами?
Пример:
Взяв функцию rand()
, я хочу сохранитьтолько результаты, которые выше >= 0.5
и генерируют 10 выборок.
Конечно, я мог бы сделать что-то вроде rand(Truncated(Uniform(0,1), 0, 0.5), 10)
, используя пакет Distributions, но я ищу более абстрактное решение.
Не оченьрешение для защиты:
До сих пор я нашел только следующее:
using IterTools
cond(x) = ...
f() = ...
gen = IterTools.repeatedly(f)
samples = collect(IterTools.take((n for n in gen if cond(n)), size))
Для приведенного выше примера:
using Distributions
using IterTools
cond(x) = x >= 0.5
f() = rand(Uniform(0,1))
gen = IterTools.repeatedly(f)
rnd_nodes = collect(IterTools.take((n for n in gen if cond(n)), 10))
Но есть ли, возможно, более короткий / лаконичный /более читабельный способ сделать это?