gpt4 book ai didi

.net - F# - 将简单的 for 循环转化为更多功能的结构

转载 作者:行者123 更新时间:2023-12-01 08:50:16 24 4
gpt4 key购买 nike

我有一个带有“终身”属性的简单“投资”类型:

type Investment = {
PurchasePayment: float;
Lifetime: float;
TaxWriteoff: float;
ResidualValue: float;
}

let CoffeMachine = {
PurchasePayment = 13000.0;
Lifetime = 4.0;
TaxWriteoff = 2000.0;
ResidualValue = 500.0;
}

我想对这些年的投资进行迭代,并对每年进行一些计算:
for i = 1 to int CoffeMachine.Lifetime do
printf "%i" i
// doSomething

有没有办法避免使用 for 循环并以更实用的风格编写它?

干杯,

沃伊泰克

最佳答案

对列表中的每个项目执行计算的首选方法称为 map .具体来说,对于您的情况,您可以创建一个从 1 到 Lifetime 的数字列表。然后使用 List.map对每个执行计算:

let calculation year = year * 2 // substitute your calculation here

let calcResults = [1..int CoffeMachine.Lifetime] |> List.map calculation

也就是说,我认为您将“功能性”与“难以理解”(或者,“炫耀”)混淆了。 “函数式编程”的重点不在于所有的数学知识,并且对于初学者来说是无法访问的。 “函数式编程”的重点是“用函数编程”。这有一些实际意义,例如“不可变数据”和“无副作用”,只要您的程序满足这些要求,您就可以认为它是“功能性的”,无论它看起来多么简单。事实上,我认为它看起来越简单越好。软件可维护性是一个非常有值(value)的目标。

特别是,如果你只是想打印出年份,那么你的代码就可以了:打印出来本身就是一个“副作用”,所以只要这是一个要求,就没有办法让它更“实用”。但是如果你的目标是执行一些计算(如我上面的例子),那么可以用列表理解来表达更清晰:
let calcResults = [for year in 1..int CoffeMachine.Lifetime -> calculation year]

关于.net - F# - 将简单的 for 循环转化为更多功能的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44357191/

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