0

我正在尝试编写三个可用于在 SML 中操作集合的函数定义。如您所见,我们将实现基于列表。

Union 是 Set s 和 Set t 中所有元素的集合。(不允许重复)

交集是其中元素同时属于 Set s 和 Set t 的集合。

如果 Set s 和 Set t 是集合,那么 Set s 在 Set t 中的相对补集是 Set t 中的元素集合,而不是 Set s 中的元素集合。

现在代码如下所示:

  fun filter p [] = []
 |       filter p (h::t) =
                 if p h
                 then h :: (filter p t)
                 else (filter p t);

  fun mem [] a = false
 |        mem (h::t) a = (a=h) orelse (mem t a);


 signature SETS =
       sig
                 type ''a set
                 val union : ''a set -> ''a set -> ''a set
                 val intersection : ''a set -> ''a set -> ''a set
                 val difference : ''a set -> ''a set -> ''a set
       end;

 structure Set : SETS =
       struct
                 type ''a set = ''a list;
                 fun union s t = **(Code goes here)**
                 fun intersection s t = **(Code goes here)**
                 fun difference s t =  **(Code goes here)**
       end; 

如您所见,需要时使用两个帮助函数 - mem 和 filter.filter 将通过一个列表并只保留满足某个布尔函数 p 的那些元素,而 mem 只是检查一个列表以查看它是否包含值 a .

4

0 回答 0