找到一个子集,但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,但我收到以下错误消息:找到一个子集,但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
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