gpt4 book ai didi

f# - 找到一个子集,但是 F# 不会让我比较两组不同的长度

转载 作者:行者123 更新时间:2023-12-02 06:59:35 25 4
gpt4 key购买 nike

我试图找出一组是否是另一组的子集。如果两组长度相同,我的代码将完美运行。

例如,

我的代码将返回 true,如果

x = [a;b;c]y = [a;b;c]

如果出现以下情况,我的代码将返回 false

x = [a;b;c]y = [a;b;d]

但是,如果我尝试,我的代码甚至不会编译

x = ['a';'b';'c']y = ['a';'b';'c';'d']

它应该返回 true,但我收到以下错误消息:

Type mismatch. 
Expecting a Set<char * char * char> but given a Set<char * char * char * char>

The tuples have differing lengths of 3 and 4

我的代码如下

let mySubList x y =
printfn "%A is a proper subset of %A: %b" x y (Set.isSubset x y)

let x = Set.empty.Add('a','b','c')
let y = Set.empty.Add('a','b','c', 'd')
let z = Set.empty.Add('a','x','a','y','c','e')

let found = mySubList x y

最佳答案

所有集合都包含相同数量的元素:它们都只包含一个元素。但是它们包含不同类型的元素,这就是您无法比较的原因。即x包含一个三元组(char * char * char),y包含一个四元组和z 包含一个 5 元组。

这里要注意的重要一点是 Add('a', 'b', 'c') 不会调用带有多个参数的 Add - 它调用它有一个参数,它是一个元组。这会将单个元组元素添加到集合中。要添加多个元素,请多次使用 Add 或仅在列表中使用 set(即 set ['a'; 'b'; 'c'] ) 而不是 Add 以避免多次函数调用。

关于f# - 找到一个子集,但是 F# 不会让我比较两组不同的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23587696/

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