gpt4 book ai didi

f# - 在 F# 中函数式编写平方和

转载 作者:行者123 更新时间:2023-12-02 05:32:45 25 4
gpt4 key购买 nike

所以我有这 4 个例子,其中 3 个来自这个 youtube video .

我刚刚上了一门函数式编程类(class)(在 Racket 中),如果我对 F# 的基本理解是正确的,那我就是。

let data = [1.;2.;3.;4.]

let sqr x = x * x

// Bad, very bad
let sumOfSquareI nums =
let mutable acc = 0.0
for x in nums do
acc <- acc + sqr x
acc

// Better than above, but may cause stack overflow with very long list
let rec sumOfSquareF1 nums =
match nums with
| [] -> 0.0
| h::t -> sqr h + sumOfSquareF1 t

// much much better, uses tail-recursion, no stack overflow
let sumOfSquareF2 nums =
let rec sumOfSquareLocal nums acc =
match nums with
| [] -> acc
| h::t -> sumOfSquareLocal t (acc + sqr h)
sumOfSquareLocal nums 0.0

// seems to be idiomatic F#, but is it better than tail-recursive version?
let sumOfSquare nums =
nums
|> Seq.map sqr
|> Seq.sum

sumOfSquare data
sumOfSquareI data
sumOfSquareF1 data
sumOfSquareF2 data

最后两个功能之间有什么真正的区别吗?这个比那个好吗?在 F# 中编写函数式代码时,我应该多久使用一次 |> 运算符(这对我来说是全新的)?

另一件事是在 F# 中创建列表有不同的方法吗?我从视频中提取的内容似乎......笨重。

最佳答案

是的,您应该更喜欢使用 Seq 中的高阶函数。和 List显式递归的模块。您也可以使用sumBy :

let sumOfSquare nums = nums |> Seq.sumBy sqr

关于f# - 在 F# 中函数式编写平方和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36773379/

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