F#パラメーターを高階関数にパイプするか、独自の関数を宣言する

Khaine775

入力リストを別のタイプに処理する関数がありますが、それ自体はここでは興味深いものではありません。

let testList = [(1,"c");(2,"a");(1,"b")]

let rec toRel xs =
    let rec insert (a, b) ys =
        match ys with
        | []                        -> [(a, [b])]
        | (a', b')::ys' when a' = a -> (a', b::b')::ys'
        | y::ys'                    -> y::insert (a, b) ys'   
    match xs with
    | []          -> []
    | (a,b)::rest -> insert (a, b) (toRel rest) 

toRel testList //Expected [(1, ["c";"b"]); (2, ["a"])]

これはよくて良いことであり、次のようにリファクタリングできます。

testList |> List.groupBy xs |> List.map (fun (k, v) -> (k, list.map snd v))

同じ結果が得られます。

この配管プロセスを関数にカプセル化しようとすると、問題が発生します。

let toRelHigherOrder xs = List.groupBy xs |> List.map (fun (k, v) -> (k, list.map snd v))

toRelHigherOrder testList

This expression was expected to have type ''a -> 'b' but here has type '(int * string) list

何が得られますか?

ガス

私はあなたのパイプが間違っていると思います、それは次のようになります:

testList |> List.groupBy fst |> List.map (fun (k, v) -> (k, List.map snd v))

したがって、関数は次のようになります。

let f x = x |> List.groupBy fst |> List.map (fun (k, v) -> (k, List.map snd v))

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

TypeScriptで高階関数タイプのパラメーター名を指定する必要がありますか?

分類Dev

F#関数宣言のパラメーターに名前を付ける方法

分類Dev

Ramdaパラメータを高階関数に渡す方法は?

分類Dev

F#関数を高階関数の使用に変換する

分類Dev

Rust関数のパラメーター型宣言を理解する

分類Dev

複数のパラメーターを持つF#関数をFuncタイプに変換する-MathNet.Numerics

分類Dev

高階関数に含まれるパラメーターを見つける

分類Dev

関数パラメータタイプを自動として宣言する

分類Dev

関数のパラメータタイプを推測する

分類Dev

タイプパラメータを持つトレイトをとる関数の実装を宣言するにはどうすればよいですか?

分類Dev

F#コンパイラが高階関数の関数引数を完全にインライン化できないのはなぜですか?

分類Dev

関数へのポインタをパラメータとして受け取る関数を前方宣言するにはどうすればよいですか?

分類Dev

C#からF#への相互運用:F#関数タイプの署名でC#メソッドのオプションのパラメーターを指定するにはどうすればよいですか?

分類Dev

Typescript:返された関数の入力パラメーターから高階関数のジェネリック型を推測する方法

分類Dev

匿名のJavaScript関数を関数パラメーターとして宣言するのはなぜですか?

分類Dev

TypeScriptを作成して、高階関数のテンプレートパラメーターを推測します

分類Dev

入力タイプにパラメーターを追加する関数のタイプを定義する

分類Dev

Kotlin高階関数を適応させてパラメーターを取得するにはどうすればよいですか?

分類Dev

テンプレート関数C ++のF &&、Args && ...パラメーターの後にパラメーターとして別の関数を追加する

分類Dev

関数を宣言するときのパラメーターのPHPの順序

分類Dev

F#で異なるパラメーターを持つパイプライン関数

分類Dev

F#関数パラメーターを与えるかどうか-違いは何ですか

分類Dev

パラメータのタイプを宣言するときにScalaラムダ関数が解決されませんか?

分類Dev

javascriptの関数パラメータのタイプを知るにはどうすればよいですか

分類Dev

Scalaで高階関数のパラメーターにアクセスする方法

分類Dev

関数(独自のパラメーターを持つ)を関数のパラメーターとして渡すにはどうすればよいですか?

分類Dev

C ++の関数パラメータで優先キューを宣言する方法

分類Dev

パラメータタイプをパラメータとして取得する関数のタイプ

分類Dev

F#再帰、ライブラリ関数、またはループなしで階乗関数を作成する

Related 関連記事

  1. 1

    TypeScriptで高階関数タイプのパラメーター名を指定する必要がありますか?

  2. 2

    F#関数宣言のパラメーターに名前を付ける方法

  3. 3

    Ramdaパラメータを高階関数に渡す方法は?

  4. 4

    F#関数を高階関数の使用に変換する

  5. 5

    Rust関数のパラメーター型宣言を理解する

  6. 6

    複数のパラメーターを持つF#関数をFuncタイプに変換する-MathNet.Numerics

  7. 7

    高階関数に含まれるパラメーターを見つける

  8. 8

    関数パラメータタイプを自動として宣言する

  9. 9

    関数のパラメータタイプを推測する

  10. 10

    タイプパラメータを持つトレイトをとる関数の実装を宣言するにはどうすればよいですか?

  11. 11

    F#コンパイラが高階関数の関数引数を完全にインライン化できないのはなぜですか?

  12. 12

    関数へのポインタをパラメータとして受け取る関数を前方宣言するにはどうすればよいですか?

  13. 13

    C#からF#への相互運用:F#関数タイプの署名でC#メソッドのオプションのパラメーターを指定するにはどうすればよいですか?

  14. 14

    Typescript:返された関数の入力パラメーターから高階関数のジェネリック型を推測する方法

  15. 15

    匿名のJavaScript関数を関数パラメーターとして宣言するのはなぜですか?

  16. 16

    TypeScriptを作成して、高階関数のテンプレートパラメーターを推測します

  17. 17

    入力タイプにパラメーターを追加する関数のタイプを定義する

  18. 18

    Kotlin高階関数を適応させてパラメーターを取得するにはどうすればよいですか?

  19. 19

    テンプレート関数C ++のF &&、Args && ...パラメーターの後にパラメーターとして別の関数を追加する

  20. 20

    関数を宣言するときのパラメーターのPHPの順序

  21. 21

    F#で異なるパラメーターを持つパイプライン関数

  22. 22

    F#関数パラメーターを与えるかどうか-違いは何ですか

  23. 23

    パラメータのタイプを宣言するときにScalaラムダ関数が解決されませんか?

  24. 24

    javascriptの関数パラメータのタイプを知るにはどうすればよいですか

  25. 25

    Scalaで高階関数のパラメーターにアクセスする方法

  26. 26

    関数(独自のパラメーターを持つ)を関数のパラメーターとして渡すにはどうすればよいですか?

  27. 27

    C ++の関数パラメータで優先キューを宣言する方法

  28. 28

    パラメータタイプをパラメータとして取得する関数のタイプ

  29. 29

    F#再帰、ライブラリ関数、またはループなしで階乗関数を作成する

ホットタグ

アーカイブ