Нестандартная оценка и PackedArray

Я ранее спросил , как сделать allTrue [{x, list}, test ] функция, которая защищает символ-заполнитель x от оценки в текущем контексте так же, как Таблица [expr, {x, ...}] защищает x

Рецепт, который я в итоге использовал, периодически выходил из строя, и я обнаружил, что проблема вызвана автоматическим преобразованием списков в PackedArrays. Вот' sa неудачный пример

SetAttributes[allTrue, HoldAll];
allTrue[{var_, lis_}, expr_] := 
  LengthWhile[lis, 
    TrueQ[ReleaseHold[Hold[expr] /. HoldPattern[var] -> #]] &] == 
   Length[lis];
allTrue[{y, Developer`ToPackedArray[{1, 1, 1}]}, y > 0]

Я хочу, чтобы allTrue [{x, {1,2,3}}, x> 0] возвращал True независимо от того, {1, 2,3} автоматически конвертируется в PackedArray , как лучше реализовать его?

5
задан Community 23 May 2017 в 12:13
поделиться