我试图找出一组是否是另一组的子集。如果两个集的长度相同,我的代码就可以正常工作。
例如,
如果
,我的代码将返回truex = [a; b; c] y = [a; b; c]
如果
,我的代码将返回falsex = [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
答案 0 :(得分:8)
所有集合都包含相同数量的元素:它们都只包含一个元素。但是它们包含不同类型的元素,这就是您无法比较的原因。即x
包含3元组(char * char * char
),y
包含4元组,z
包含5元组。
这里要注意的重要一点是Add('a', 'b', 'c')
没有用多个参数调用Add
- 它用一个参数调用它,这是一个元组。这将向集合添加单个元组元素。要添加多个元素,请多次使用Add
,或者只使用列表中的set
(即set ['a'; 'b'; 'c']
)而不是Add
来避免多个函数调用。