如果集合为空,如何检查 f#?

How to check in f# if the set is Empty?

如何检查集合是否为空,我已经实现了以下代码,如果集合有一个空集合,那么我应该得到值 true else false,例如:[1; 2; []] 这个集合的结果应该是 true 并且如果集合是 [1; 2; 3] 这应该导致错误,因为这个没有空集。以下是给我错误的代码:

let rec isEmpty S =
   match S with
  |[] -> true
  |_ -> false
  |e::rest -> ([]=e) || (isEmpty [] rest)

不幸的是,对于您的用例,F# 比您在这里想要的要多 'strongly typed'。

在 F# 中,值类似于 [1; 2; 3] 是一个 int 列表,int 列表不会接受像 [1; 这样的值。 2; []].

或许您可以尝试为您的问题定义一个新的(递归)数据类型。