找到一个子集,但F#不能让我比较两组不同长度的集合

找到一个子集,但F#不能让我比较两组不同长度的集合,f#,F#,我试图找出一个集合是否是另一个集合的子集。如果两个集合的长度相同,我的代码就可以完美地工作 比如说, 如果 x=[a;b;c] y=[a;b;c] 如果 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&l

我试图找出一个集合是否是另一个集合的子集。如果两个集合的长度相同,我的代码就可以完美地工作

比如说,

如果

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

如果

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

所有集合都包含相同数量的元素:它们都只包含一个元素。但是,它们包含不同类型的元素,这就是为什么不能进行比较。也就是说,
x
包含一个3元组(
char*char*char
),
y
包含一个4元组,
z
包含一个5元组


这里需要注意的重要一点是,
Add('a','b','c')
不使用多个参数调用
Add
,而是使用一个参数(即元组)调用它。这将向集合中添加一个元组元素。要添加多个元素,请多次使用
add
,或者只使用列表上的
set
(即
set['a';'b';'c']
)而不是
add
,以避免多个函数调用。

构建集合的标准方法是
set['a';'b';'c']
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