複数のパラメーターを持つHaskellフィルター関数

トムコート

私はHaskellを学ぼうとしていて、複数のパラメーターを受け取る関数を使用して特定のリストをフィルター処理し、リストの各要素を他の不変の要素とともに関数に渡して、新しいリストを作成する方法を考えました。

これを実行して、bool関数を使用してリストをフィルタリングできることを理解しています。

newList = filter theFunction aList

しかし、theFunctionが次のような他のパラメーターを受け取るとどうなりますか?

theFunction -> elementOfAList -> Int -> Bool 

次に、関数の別の要素を解析しながら、リストの各要素をフィルタリングするにはどうすればよいですか?どんな助けでも大歓迎です:)

編集->さらに情報を提供するために、[1..10]の整数のリストが必要な場合、2つの整数を受け取り、最初の整数が小さい場合はtrueを返す関数でフィルター処理されます。どうすればよいですか?それ?

ネス

その場合、次のように部分的に適用された述語関数を使用します

-- theFunction :: elementOfAList -> Int -> Bool       -- "::" means, "is of type"
newList = filter (flip theFunction i) aList

なぜなら

flip theFunction i x = theFunction x i

の定義によりflipflip theFunctionタイプもありInt -> elementOfAList -> Boolます:

flip ::       (a -> b   -> c   ) -> b -> a -> c
theFunction :: a -> Int -> Bool
flip theFunction ::               Int -> a -> Bool
flip theFunction  (i ::  Int)         :: a -> Bool

ここで、iInt他の場所で定義されている値です。aは型変数です。つまり、リストの要素の型のように、任意の型にすることができます(つまり、リストの場合、aList :: [a]各要素は同じ型を持ちますa)。

たとえば、をtheFunction x i = x < i呼び出すとfilter (flip theFunction 5) aList、結果のリストにそのすべての要素がaList5より小さいままになります。通常、これはfilter (< 5) aList演算子セクション(< 5)1つの例であり、完全に同等)を使用してと記述されflip theFunction 5ます。


上記のフィルタリングで、リストのすべての要素呼び出す際に同じIntが使用さiますそれを再計算したい場合は、別のパターン(つまり、高階関数)で実行されます。theFunctionxaListInt

mapAccumL :: (acc -> x -> (acc, y)) -> acc -> [x] -> (acc, [y])

によって検出されているすべての要素をintのリストに保持したいとしますtheFunctionその後、あなたはそれを次のようにすることができます

theFunction :: elementOfAList -> Int -> Bool
foo :: Int -> [Int] -> [Int]
foo i xs = concat (snd (mapAccumL g i xs))    -- normally written as
        -- concat $ snd $ mapAccumL g i xs     -- or 
        -- concat . snd $ mapAccumL g i xs      -- or even
        -- concat . snd . mapAccumL g i $ xs
  where
  g acc x   -- g :: (acc -> x -> (acc, y))  according to mapAccumL's signature
    | theFunction x acc = (x, [x])   -- include `x` in output, and update the acc
    | otherwise         = (acc, [])  -- keep the accumulated value, and skip this `x`

xacc両方とも同じ役割(タプルの最初の要素)で使用されるため、両方とも同じタイプである必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Clojure:複数のパラメーターを持つ関数でフィルターを使用する

分類Dev

複数のパラメーターを持つ角度入力フィルター

分類Dev

複数のパラメーターを持つJmDNSTXTフィールド

分類Dev

複数のパラメータを持つ React 関数

分類Dev

複数のオプションパラメータを持つ関数へのWebAPIルーティング

分類Dev

Python-複数の条件を持つフィルター関数

分類Dev

複数の引数を持つ関数のJavascriptデフォルトパラメータ

分類Dev

複数のタイプを拡張する汎用パラメーターを持つ静的フィールド

分類Dev

複数のパラメーターを持つuseApiフック

分類Dev

マップを使用して複数のパラメーターを持つ関数を呼び出すHaskell

分類Dev

symfony 4ルーティング:複数のスラッシュを持つ複数のパラメーター?

分類Dev

PostgreSQL:複数の日付パラメーターを持つ関数

分類Dev

Haskell:複数のパラメーターを持つSortBy(生年月日)

分類Dev

複数のパラメータ ブラケットを持つ Python 関数

分類Dev

`map`で複数のパラメータを持つ関数を使用する

分類Dev

T-SQL-デフォルトのパラメータを持つ関数

分類Dev

参照パラメーターを持つブール関数

分類Dev

複数のパラメータリストを持つ無名関数

分類Dev

複数のコールバックパラメータを持つ関数を約束する方法は?

分類Dev

デフォルトのパラメーターを持つKotlin関数が未使用のパラメーターを持つメソッドを作成する理由

分類Dev

constパラメーターを持つフレンド関数

分類Dev

argparse:複数のパラメーターを持つオプションのコンバーター関数?

分類Dev

複数のパラメーターを持つMapStruct QualifiedByName

分類Dev

複数のパラメーターを持つJPA Criteria API

分類Dev

複数のパラメーターを持つAngularJS $ broadcast

分類Dev

複数のパラメーターを持つAngularJS $ broadcast

分類Dev

複数のパラメーターを持つLaraverFindOrNew

分類Dev

複数のパラメーターを持つcreateQueryBuilderとsetParameter?

分類Dev

複数の値を持つパラメーターPython

Related 関連記事

  1. 1

    Clojure:複数のパラメーターを持つ関数でフィルターを使用する

  2. 2

    複数のパラメーターを持つ角度入力フィルター

  3. 3

    複数のパラメーターを持つJmDNSTXTフィールド

  4. 4

    複数のパラメータを持つ React 関数

  5. 5

    複数のオプションパラメータを持つ関数へのWebAPIルーティング

  6. 6

    Python-複数の条件を持つフィルター関数

  7. 7

    複数の引数を持つ関数のJavascriptデフォルトパラメータ

  8. 8

    複数のタイプを拡張する汎用パラメーターを持つ静的フィールド

  9. 9

    複数のパラメーターを持つuseApiフック

  10. 10

    マップを使用して複数のパラメーターを持つ関数を呼び出すHaskell

  11. 11

    symfony 4ルーティング:複数のスラッシュを持つ複数のパラメーター?

  12. 12

    PostgreSQL:複数の日付パラメーターを持つ関数

  13. 13

    Haskell:複数のパラメーターを持つSortBy(生年月日)

  14. 14

    複数のパラメータ ブラケットを持つ Python 関数

  15. 15

    `map`で複数のパラメータを持つ関数を使用する

  16. 16

    T-SQL-デフォルトのパラメータを持つ関数

  17. 17

    参照パラメーターを持つブール関数

  18. 18

    複数のパラメータリストを持つ無名関数

  19. 19

    複数のコールバックパラメータを持つ関数を約束する方法は?

  20. 20

    デフォルトのパラメーターを持つKotlin関数が未使用のパラメーターを持つメソッドを作成する理由

  21. 21

    constパラメーターを持つフレンド関数

  22. 22

    argparse:複数のパラメーターを持つオプションのコンバーター関数?

  23. 23

    複数のパラメーターを持つMapStruct QualifiedByName

  24. 24

    複数のパラメーターを持つJPA Criteria API

  25. 25

    複数のパラメーターを持つAngularJS $ broadcast

  26. 26

    複数のパラメーターを持つAngularJS $ broadcast

  27. 27

    複数のパラメーターを持つLaraverFindOrNew

  28. 28

    複数のパラメーターを持つcreateQueryBuilderとsetParameter?

  29. 29

    複数の値を持つパラメーターPython

ホットタグ

アーカイブ