Функции высшего порядка ----------------------- Оператор ->, функция lambda(params, expr) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Позволяет описать лямбда-функцию для передачи в функцию высшего порядка. Слева от стрелочки стоит формальный параметр - произвольный идентификатор, или несколько формальных параметров - произвольные идентификаторы в кортеже. Справа от стрелочки стоит выражение, в котором могут использоваться эти формальные параметры, а также любые столбцы таблицы. Примеры: ``x -> 2 * x, str -> str != Referer.`` Функции высшего порядка, в качестве своего функционального аргумента могут принимать только лямбда-функции. В функции высшего порядка может быть передана лямбда-функция, принимающая несколько аргументов. В этом случае, в функцию высшего порядка передаётся несколько массивов одинаковых длин, которым эти аргументы будут соответствовать. Для всех функций кроме arrayMap, arrayFilter, первый аргумент (лямбда-функция) может отсутствовать. В этом случае, подразумевается тождественное отображение. arrayMap(func, arr1, ...) ~~~~~~~~~~~~~~~~~~~~~~~~~ Вернуть массив, полученный из исходного применением функции func к каждому элементу массива arr. arrayFilter(func, arr1, ...) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Вернуть массив, содержащий только те элементы массива arr1, для которых функция func возвращает не 0. Примеры: .. code-block:: sql SELECT arrayFilter(x -> x LIKE '%World%', ['Hello', 'abc World']) AS res .. code-block:: text ┌─res───────────┐ │ ['abc World'] │ └───────────────┘ .. code-block:: sql SELECT arrayFilter( (i, x) -> x LIKE '%World%', arrayEnumerate(arr), ['Hello', 'abc World'] AS arr) AS res .. code-block:: text ┌─res─┐ │ [2] │ └─────┘ arrayCount([func,] arr1, ...) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Вернуть количество элементов массива arr, для которых функция func возвращает не 0. Если func не указана - вернуть количество ненулевых элементов массива. arrayExists([func,] arr1, ...) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Вернуть 1, если существует хотя бы один элемент массива arr, для которого функция func возвращает не 0. Иначе вернуть 0. arrayAll([func,] arr1, ...) ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Вернуть 1, если для всех элементов массива arr, функция func возвращает не 0. Иначе вернуть 0. arraySum([func,] arr1, ...) ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Вернуть сумму значений функции func. Если функция не указана - просто вернуть сумму элементов массива. arrayFirst(func, arr1, ...) ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Вернуть первый элемент массива arr1, для которого функция func возвращает не 0. arrayFirstIndex(func, arr1, ...) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Вернуть индекс первого элемента массива arr1, для которого функция func возвращает не 0.