Filter(高階函式)
佇函式的語言程式設計內底,過濾器(filter)是一个高階函式,伊按某一種次序處理一个資料結構(伊通常是列表), 來產一个新的資料結構,伊精確的包括上早起資料結構中予定謂詞著其返回布林值 ` true ` 的遐的元素。
定義
Python
佇咧 Python 中,` filter ` 佇咧說明文件內底的語法是 ` filter ( function , iterable ) `
會當用按呢若落去法度列表推導式實現在 Python 二中 ` filter ` 倒轉來一个 ` list `,啊若佇咧 Python 三中 ` filter ` 倒轉去一个迵天代的物件。
Haskell
佇咧 Haskell 中,` filter ` 會使如下按呢實現:
遮的 ` [] ` 指示空串列,` + + ` 是列表串接算子,而且 ` [ x | p x] ` 指示有條件持有一个值 ` x ` 的列表,若條件 ` p x ` 成立(求值為 ` True `)。
例
佇咧 Haskell 中代碼例
求值得著列表 ` 二 , 四 ,…, 十 `,這是通過應用謂詞 ` even ` 到整數列表 ` 一 , 二 ,…, 十 ` 的照原次序的所有元素,閣建立人講詞嘿其實轉去布林值 ` true ` 的遐的元素的一个新的列表,因為這个出的是干焦包括原列表的偶數成員的一个列表。顛倒反,代碼例:
求值得出列表 ` 一 , 三 ,…, 九 `,這是通過搜集整數列表 ` 一 , 二 ,…, 十 ` 中,伊講著其返回布林值 ` false ` 的遐的元素(遮的 ` . ` 是函式複合算子)。
佇咧 Python 三中代的碼例
看會著的例
下跤是一个過濾器過程每一个步驟的可視演示,對整數列表 ` X=[零 , 五 , 八 , 三 , 二 , 一] ` 根據函式:
- : $ f ( x )={ \ begin { cases } True & { \ text { if } } x \ equiv 零 { \ pmod { 二 } } \ \ False & { \ text { if } } x \ equiv 一 { \ pmod { 二 } } . \ end { cases } } $
這个函式表達矣若 $ x $ 是偶數,愛轉去回值講是 $ True $,抑無是 $ False $,這是謂詞。
語言較
過濾器是誠濟程式語言的標準函式,比如講 Haskell、OCaml、Standard ML 抑是 Erlang。Common Lisp 提供了函式的 ` remove-if ` 和 ` remove-if-not `。Scheme 實現要求(SRFI)一提供矣 Scheme 語言過濾器的一个實現。C + + 提供了演算法 ` remove _ if `(可變)和 ` remove _ copy _ if `(不可變); C + + 十一補充提供矣 ` copy _ if `(不可變)。 Smalltalk 為搜集提供了 ` select : ` 方法。過濾器閣會使佇支援列表推導式的語言使用伊來實現。
變體
過濾器建立伊的結果而無修改上頭仔列表。有真濟程式語言閣提供破壞性修改列表實際參數的有閣較緊效能的變體。過濾器的其他變體(比如講 Haskell ` dropWhile ` 和 ` partition `)嘛是定定看著的。常見的純函式語言程式設計語言記憶體最佳化是有輸入列表並過濾結果共享上長尾部。
參見
- Map ( 高階函式 )
- Fold ( 高階函式 )
- 列表推導式
- 衛語句