gpt4 book ai didi

list - F# - 复制列表的递归函数

转载 作者:行者123 更新时间:2023-12-02 09:32:53 24 4
gpt4 key购买 nike

我编写此代码是为了递归复制我的列表:

let sp = [2;4;6;8;10]
let copy (s1:'a list) =
let rec copy acc ind =
if(ind>=0) then
copy (s1.[ind]::acc) (ind-1)
else acc
copy [] (s1.Length-1)


sp |> copy |> printfn "%A"

如何使这段代码更简单?

最佳答案

对列表执行查找(以及获取列表的长度)效率不是很高,因为库需要迭代整个列表(或前 N 个元素)。因此,在 F# 中这样做并不是很惯用。

您仍然可以保留代码的大部分结构,但可以像这样进行一些更改:

let copy input =
let rec copy acc input =
match input with
| [] -> List.rev acc
| x::xs -> copy (x::acc) xs
copy [] input

变化是:

  • 我们对输入使用模式匹配并始终获取第一个元素
  • 由于我们以相反的顺序将项目附加到 acc,因此我们调用 List.rev 来反转最后的结果(这是处理列表时的标准技巧)

关于list - F# - 复制列表的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30803581/

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