我试图编写三个可用于在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。