在SML中创建集合函数union,difference,intersection

时间:2015-04-02 14:03:21

标签: functional-programming set sml set-difference set-union

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

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

交点是元素是Set s和Set t的一部分的集合。

如果Set s和Set t是集合,则Set t中Set s的相对补集是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将通过列表并仅保留满足某些功能的元素 mem布尔函数p,而mem只检查列表以查看它是否包含值a。

0 个答案:

没有答案