我正在尝试在 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)