3

F#でリスト内包表記を書き込もうとしていますが、コンパイルできません。

[for x in xs do
    let y = f(x)
    when g(y) -> y]

リスト内包の途中で中間計算を保存する方法はありますか?このリスト内包表記を再加工してコンパイルするにはどうすればよいですか?

4

2 に答える 2

9

リスト内包をスキップします。

let ys = xs |> List.map f |> List.filter g

ただし、コードを機能させるのは簡単です。

let ys = [ for x in xs do
               let y = f(x)
               if g(y) then yield y ] 
于 2012-11-25T01:45:31.193 に答える
5

@ChaosPandionのソリューションを拡張するには、-を使用してこれを作成することもできます。これは、との組み合わせとList.choose考えて、余分なリストを作成しないようにします(つまり、リストを作成してに渡すだけではありません)。List.mapList.filterList.mapList.filter

let ys =
    xs
    |> List.choose (fun x ->
        let y = f x
        if g y then Some y else None)
于 2012-11-25T13:55:26.830 に答える