~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 19FA156B7A75C6F86AE90CA5C41A7C09__1648740540 ✰
Заголовок документа оригинал.:
✰ Filter (higher-order function) - Wikipedia ✰
Заголовок документа перевод.:
✰ Фильтр (функция высшего порядка) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Filter_(higher-order_function) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/19/09/19fa156b7a75c6f86ae90ca5c41a7c09.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/19/09/19fa156b7a75c6f86ae90ca5c41a7c09__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 09:44:19 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 31 March 2022, at 18:29 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Фильтр (функция высшего порядка) — Википедия Jump to content

Фильтр (функция высшего порядка)

Из Википедии, бесплатной энциклопедии

В функциональном программировании фильтр это функция высшего порядка , которая обрабатывает структуру данных (обычно список ) в некотором порядке для создания новой структуры данных, содержащей именно те элементы исходной структуры данных, для которых данный предикат возвращает логическое значение. true.

Пример [ править ]

В Haskell пример кода

 фильтровать   даже   [  1  ..  10  ] 

вычисляет список 2, 4,…, 10, применяя предикат evenк каждому элементу списка целых чисел 1, 2, …, 10 в этом порядке и создания нового списка тех элементов, для которых предикат возвращает логическое значение true, тем самым создавая список, содержащий только четные члены этого списка. И наоборот, пример кода

 фильтр   (  нет   .   даже  )   [  1  ..  10  ] 

вычисляет список 1, 3, …, 9, собирая те элементы списка целых чисел 1, 2, …, 10, для которых предикат even возвращает логическое значение false (с . являющийся оператором композиции функций ).

Визуальный пример [ править ]

Ниже вы можете увидеть каждый шаг процесса фильтрации для списка целых чисел. X = [0, 5, 8, 3, 2, 1] по функции:

Эта функция выражает, что если даже возвращаемое значение , иначе это . Это предикат.

применение этапов обработки функции фильтра
Просмотр этапов обработки при применении функции фильтра к списку

Сравнение языков [ править ]

Фильтр — стандартная функция для многих языков программирования , например, Хаскелл, [1] ОКамл , [2] Стандартный МЛ , [3] или Эрланг . [4] Common Lisp предоставляет функции remove-if и remove-if-not. [5] Запросы на реализацию схемы (SRFI) 1 обеспечивают реализацию фильтра для языка Scheme . [6] C++ предоставляет алгоритмы remove_if (мутирующие) и remove_copy_if(немутирующий); C++11 дополнительно предоставляет copy_if (немутирующий). [7] Smalltalk предоставляет select:метод для коллекций. Фильтр также можно реализовать с использованием списков на языках, которые их поддерживают.

В Хаскеле filter можно реализовать следующим образом:

 фильтр   ::   (  a   ->   Bool  )   ->   [  a  ]   ​​->   [  a  ] 
  ​​фильтр   _   []       =   [] 
  фильтр   p   (  x  :  xs  )   =   [  x   |    p   x  ]   ++   фильтр   p   xs 

Здесь, [] обозначает пустой список, ++ операцию объединения списков и [x | p x] обозначает список, условно содержащий значение, x, если условие p x держится (оценивается как True).

Фильтровать на разных языках
Язык Фильтр Примечания
АПЛ (pred array)/array
или
pred{/⍨⍺⍺ }array
Второй пример — доп APL .
С# 3.0 ienum.Where(pred)
или
The where пункт
Где находится метод расширения
ienum — это IEnumerable
Аналогично во всех языках .NET.
CFML obj.filter(func) Где objпредставляет собой массив или структуру. func получает в качестве аргумента значение каждого элемента.
Кложур (filter predicate list)[8] Или, через понимание списка : (for [x list :when (pred x)] x)
Общий Лисп (remove-if inverted-pred list)
(remove-if (complement pred) list)
(remove-if-not pred list)
Функция remove-if-not устарел [5] в пользу эквивалента remove-if где предикат дополняется. [9] Таким образом, фильтр (remove-if-not #'oddp '(0 1 2 3)) должно быть написано (remove-if (complement #'oddp) '(0 1 2 3)) или проще: (remove-if #'evenp '(0 1 2 3)) где evenp возвращает инвертированное значение oddp. [10]
С++ std::remove_copy_if(begin, end, result, prednot)
std::copy_if(begin, end, result, pred) (C++11)
в заголовке <алгоритм>
начало , конец , результат — итераторы
предикат перевернут
Д std.algorithm.filter!(pred)(list)
Эрланг lists:filter(Fun, List) Или, через понимание списка : [ X || X <- List, Fun(X) ]
классный list.findAll(pred)
Хаскелл filter pred list Или, через понимание списка : [x | x <- list, pred x]
Смешанный list.filter(pred)
Lambda.filter(list, pred)
Или, через понимание списка : [x | x <- list, pred x]
Дж (#~ pred) list Пример монадического крючка. # — это копирование, ~ меняет аргументы. (f g) y = y f (g y)
Юлия filter(pred, array) Функция фильтра также принимает dictтип данных. Или, через понимание списка : [x for x in array if pred(x)]
Ява 8+ stream.filter(pred)
JavaScript 1.6 array.filter(pred)
Котлин array.filter(pred)
Математика Select[list, pred]
Objective-C ( Какао в Mac OS X 10.4+) [array filteredArrayUsingPredicate:pred] pred является объектом NSPredicate , выразительность которого может быть ограничена.
F# , OCaml , стандартное машинное обучение List.filter pred list
ПАРИ/ГП select(expr, list) В версии 2.4.2 порядок аргументов изменен на обратный.
Перл grep block list
grep expr, list
PHP array_filter(array, pred)
Пролог filter(+Closure,+List,-List) Начиная с ISO/IEC 13211-1:1995/Cor.2:2012. [11] основной стандарт содержит приложение закрытия через call/N[12]
Питон filter(func, list) Или, через понимание списка : [x for x in list if pred(x)]. В Python 3 filter был изменен, чтобы возвращать итератор , а не список. [13] Дополнительная функциональность, возвращающая итератор по элементам, для которых предикат имеет значение false, также доступна в стандартной библиотеке как filterfalse в itertools модуль.
Рубин enum.find_all {block}
enum.select {block}
enum это перечисление
Ржавчина iterator.filter(pred) iterator является Iterator и filter метод возвращает новый итератор; pred это функция (в частности FnMut), который получает элемент итератора и возвращает bool
С , Р Filter(pred,array)
array[pred(array)]
Во втором случае pred должна быть векторизованной функцией.
Скала list.filter(pred) Или, через понимание: for(x <- list; if pred) yield x
Схема Р 6 РС (filter pred list)
(remove inverted pred list)
(partition pred list list)
Болтовня aCollection select: aBlock
Быстрый array.filter(pred)
filter(sequence, pred)
XPath , XQuery list[block]
filter(list, func)
В block элемент контекста . сохраняет текущее значение

Варианты [ править ]

Фильтр создает результат без изменения исходного списка. Многие языки программирования также предоставляют варианты, которые вместо этого деструктивно изменяют аргумент списка для повышения производительности. Другие варианты фильтра (например, Haskell dropWhile[14] и partition[15] ) также распространены. Общая оптимизация памяти для чисто функциональных языков программирования заключается в том, чтобы входной список и отфильтрованный результат имели общий самый длинный хвост ( tail-sharing ).

См. также [ править ]

Ссылки [ править ]

  1. ^ filter в стандартной прелюдии Haskell
  2. ^ filter в OCaml модуле стандартной библиотеки list
  3. ^ «Структура списка» . Стандартная базовая библиотека машинного обучения . Проверено 25 сентября 2007 г.
  4. ^ filter/2 в документации модуля Erlang STDLIB Reference Guide. lists
  5. ^ Перейти обратно: а б Функция REMOVE, REMOVE-IF, REMOVE-IF-NOT, DELETE, DELETE-IF, DELETE-IF-NOT в HyperSpec Common Lisp
  6. ^ filter в СРФИ 1
  7. ^ remove_if и remove_copy_if SGI в спецификации стандартной библиотеки шаблонов (STL)
  8. ^ clojure.core/filter на ClojureDocs
  9. ^ Функция COMPLEMENT в Common Lisp HyperSpec.
  10. ^ Функция EVENP, ODDP в Common Lisp HyperSpec.
  11. ^ ИСО/МЭК 13211-1:1995/Кор 2:2012.
  12. ^ «Проект технического исправления 2» .
  13. ^ «Встроенные функции — документация Python 3.9.0» . docs.python.org . Проверено 28 октября 2020 г.
  14. ^ Удаление фильтра Haskell Пока
  15. ^ фильтра Haskell Раздел
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 19FA156B7A75C6F86AE90CA5C41A7C09__1648740540
URL1:https://en.wikipedia.org/wiki/Filter_(higher-order_function)
Заголовок, (Title) документа по адресу, URL1:
Filter (higher-order function) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)