gpt4 book ai didi

arrays - 是否可以在 F# 中定义列表的长度?

转载 作者:行者123 更新时间:2023-12-01 21:47:15 25 4
gpt4 key购买 nike

例如,我将记录定义为:

type a = {b : float; c: int list}

但我已经知道这个列表必须是预定义的大小,假设是 2,如果列表不是 2,那么它将是不同的类型或错误,因为它没有定义这样的类型。

是否可以定义列表的大小,就像在其他语言中必须定义大小一样?根据应用程序,这个问题可以应用于数组。

最佳答案

也许您应该使用数组而不是列表,因为数组具有固定长度:

// create an array of length = 2, initialized with zeros.
let cValues : int[] = Array.create 2 0
cValues.IsFixedSize // returns true

编辑:正如其他人所建议的,元组也可能是可行的方法。对于一对(长度为 2 的元组),您可以使用 fst 和 snd 函数访问值。对于较长的元组,您可以使用模式匹配,如下所示。如果元组太长而无法使这种模式匹配方法实用,那么您可能需要 F# 元组以外的结构。当然,需要考虑的一个主要要求是是否需要存储混合类型的值。元组或记录可以存储多种类型的混合,而数组或列表则存储单一类型的值。

let fourTuple = (5, 10, 2, 3)
let _,_,third,_ = fourTuple
printfn "%d" third // displays "2"

如果数组或元组不能满足您的要求,那么也许您应该使用另一个记录,如下所示:

type ListOfC = {c1 : int; c2 : int}
type a' = {b' : float; c' : ListOfC}

或者您可以创建一个满足您要求的新类,从下面的脚本开始。当然,这可能不会被认为是惯用的函数式编程风格。它更像是 OOP。

type ListOfTwo(firstInt : int, secondInt : int) =
member this.First = firstInt
member this.Second = secondInt

let myListOfTwo = ListOfTwo(4, 5)
myListOfTwo.First

type a = {b : float; c : ListOfTwo }

关于arrays - 是否可以在 F# 中定义列表的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34814380/

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