我正在寻找一种方法来尝试简化以下表达式,看起来很难看,IMO:
List.map (fun _ -> generateIndividual()) [1..popSize]
Run Code Online (Sandbox Code Playgroud)
我找到了List.init,但它仍然不是我想要的:
List.init popSize (fun x -> generateIndividual())
Run Code Online (Sandbox Code Playgroud)
它是完美的,它不是lambda表达式的参数.这样做很完美:
List.init popSize generateIndividual()
Run Code Online (Sandbox Code Playgroud)
F#库中有什么东西可以帮助我清理它吗?
谢谢
由于unit(void)也是一种类型,你可以这样做:
List.init popSize (ignore >> generateIndividual)
Run Code Online (Sandbox Code Playgroud)
并不是的.最接近的解决方案是改变generateIndividual函数的定义,使其接受任何类型的值(而不仅仅是类型的值unit)并丢弃它:
let generateIndividual _ = ...
Run Code Online (Sandbox Code Playgroud)
然后你可以写:
List.init popSize generateIndividual
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是使用列表理解:
[for _ in 1..popSize -> generateIndividual()]
Run Code Online (Sandbox Code Playgroud)