gpt4 book ai didi

list - F# 将在 for 循环中创建的元素添加到列表

转载 作者:行者123 更新时间:2023-12-05 09:11:20 26 4
gpt4 key购买 nike

我想向列表中添加一个元素。元素将在 for 循环内创建。我目前拥有的是

let MaxCubeVolume tpList = 
let list1 = []
printfn "%A" list1
for l,w,h in tpList do
let vol = CubeVolume l w h
let list = vol::list1
printfn "%A" list

其中 list1 是我要添加到的主列表,而 list 是我要用来添加到该列表的内容。 CubeVolume 正在运行,它需要 3 个 float 并返回立方体的体积。 tpList 是包含 3 个 float 的元组列表。我迷路的地方是如何将卷添加到主列表?

最佳答案

F# 列表是不可变的。你不能“改变”他们。您不会向它们“添加”元素。您只能从旧列表创建一个列表(但旧列表保持不变并且仍然可用)。

但这是错误的函数式编程思维框架。在函数式编程中,您不会通过反复修改数据结构来计算结果。相反,您可以将较小的数据结构组合成较大的数据结构,或者使用(和组合)为您完成的原始函数。

特别是,如果你有一个列表,比如说,假设是三元组,并且你有一个函数可以将一个这样的三元组转换成,比如说,假设是一个数字,并且你想让自己成为一个列表那些数字 - 这是一个非常著名的原始操作,称为 map:

let tripleToNumber (l, w, h) = CubeVolume l w h
let list1 = List.map tripleToNumber tpList

或者您可以指定内联转换函数,而不给它一个单独的名称:

let list1 = List.map (fun (l, w, h) -> CubeVolume l w h) tpList

然后您可以使用|> 运算符重新排列List.map 的参数,只是为了让它看起来更漂亮:

let list1 = tpList |> List.map (fun (l, w, h) -> CubeVolume l w h)

或者,您也可以使用 F# 列表理解,它们是语法糖:它们在幕后做同样的事情,但(可以说)看起来更好:

let list1 = [for (l, w, h) in tpList -> CubeVolume l w h]

这里需要注意的重要一点是,以上代码段实际上都没有更改任何数据。它们都是通过转换旧数据生成新数据。

关于list - F# 将在 for 循环中创建的元素添加到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60291927/

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