F#でリスト内包表記を書き込もうとしていますが、コンパイルできません。
[for x in xs do
let y = f(x)
when g(y) -> y]
リスト内包の途中で中間計算を保存する方法はありますか?このリスト内包表記を再加工してコンパイルするにはどうすればよいですか?
F#でリスト内包表記を書き込もうとしていますが、コンパイルできません。
[for x in xs do
let y = f(x)
when g(y) -> y]
リスト内包の途中で中間計算を保存する方法はありますか?このリスト内包表記を再加工してコンパイルするにはどうすればよいですか?
リスト内包をスキップします。
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 ]
@ChaosPandionのソリューションを拡張するには、-を使用してこれを作成することもできます。これは、との組み合わせとList.choose
考えて、余分なリストを作成しないようにします(つまり、リストを作成してに渡すだけではありません)。List.map
List.filter
List.map
List.filter
let ys =
xs
|> List.choose (fun x ->
let y = f x
if g y then Some y else None)