///|
/// Evaluate AnyGen
fn eval_any_gen(
gen_expr : Expr,
cond_expr : Expr,
input : Json,
env : Env,
) -> Iter[Json] raise InterpreterError {
let gen_results = eval_with_env(gen_expr, input, env).collect()
Iter::singleton(Json::boolean(any_gen_results(gen_results, cond_expr, env)))
}
///|
/// Evaluate AllGen
fn eval_all_gen(
gen_expr : Expr,
cond_expr : Expr,
input : Json,
env : Env,
) -> Iter[Json] raise InterpreterError {
let gen_results = eval_with_env(gen_expr, input, env).collect()
Iter::singleton(Json::boolean(all_gen_results(gen_results, cond_expr, env)))
}
///|
fn any_gen_results(
gen_results : ArrayView[Json],
cond_expr : Expr,
env : Env,
) -> Bool raise InterpreterError {
for value in gen_results {
match eval_with_env(cond_expr, value, env).collect() {
[True, ..] => return true
_ => ()
}
}
false
}
///|
fn all_gen_results(
gen_results : ArrayView[Json],
cond_expr : Expr,
env : Env,
) -> Bool raise InterpreterError {
for value in gen_results {
match eval_with_env(cond_expr, value, env).collect() {
[True, ..] => ()
_ => return false
}
}
true
}