gpt4 book ai didi

.net - 重构 F# 函数以使用前向管道运算符

转载 作者:行者123 更新时间:2023-12-05 00:03:00 24 4
gpt4 key购买 nike

type Range = int * int
type Domain = Range array

type Gene = int
type Individual = Gene array
type Population = Individual array

let genPop (domain:Domain) popSize =
let genInd (domain:Domain) : Individual =
let genGene (range:Range) = genNum (fst range) (snd range)
Array.map genGene domain
Array.init popSize (fun _ -> genInd domain)

所以,一个 Population只不过是一个 Individual 的数组s。每个 IndividualGene 的数组组成s,只不过是整数的别名。 genNum只会为我们生成一个随机整数。

我对我的 genPop 不是特别满意执行。尽管它运行良好且符合预期,但我想尝试使用正向管道运算符 |> 的实现。 , 而不是那些子函数。

有关如何继续进行的任何提示?理想情况下,我会说可以从 popSize 开始,这将被转化为一个群体,它的成员是由基因组成的个体。问题是我们通常需要以相反的方式做事。我们首先需要创建基因,然后创建个体,然后我们才能拥有种群!

你将如何实现这一点(除了我这样做的方式)?也许还有其他方式目前对我来说并不明显?

最佳答案

替换 fstsnd模式匹配:

let genGene (x, y) = genNum x y

你的整个功能可以变成:
let genPop domain popSize =
Array.init popSize (fun _ -> Array.map (fun (x, y) -> genNum x y) domain)

或者:
let genPop domain popSize =
[|for _ in 1..popSize ->
[|for x, y in domain ->
genNum x y|]|]

关于.net - 重构 F# 函数以使用前向管道运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7360334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com