Я бы хотел функцию AnyTrue[expr,{i,{i1,i2,...}}]
, которая проверяет, является ли expr
True
для любого из i1,i2...
. Это должно быть, как если бы AnyTrue
было Table
, за которым следует Or@@%
, с той разницей он оценивает только expr
, пока не будет найден первый True
.
Часть короткого замыкания является необязательной, и я действительно хотел бы знать, как правильно эмулировать нестандартную последовательность оценки Table
.
Обновление 11/14
Вот решение, благодаря Майклу, вы можете использовать его для цепочки проверок «для всех» и «существует»
SetAttributes[AllTrue, HoldAll];
SetAttributes[AnyTrue, HoldAll];
AllTrue[{var_Symbol, lis_List}, expr_] :=
LengthWhile[lis,
TrueQ[ReleaseHold[Hold[expr] /. HoldPattern[var] -> #]] &] ==
Length[lis];
AnyTrue[{var_Symbol, lis_List}, expr_] :=
LengthWhile[lis,
Not[TrueQ[ReleaseHold[Hold[expr] /. HoldPattern[var] -> #]]] &] <
Length[lis];
AllTrue[{a, {1, 3, 5}}, AnyTrue[{b, {2, 4, 5}}, EvenQ[a + b]]]
AnyTrue[{a, {1, 3, 5}}, AllTrue[{b, {2, 4, 5}}, EvenQ[a + b]]]