如何检查两组的显式并集是否为空?

时间:2019-03-07 20:48:31

标签: haskell functional-programming

下面是我的两个列表的显式联合代码。我如何获取列表的长度而不是列表本身?

explicit_union :: (Eq a) => [a] -> [a] -> [a]
explicit_union as bs = foldl (\as b -> if elem b as then as else as ++ [b]) as bs

1 个答案:

答案 0 :(得分:2)

当且仅当两个集合都为空时,联合为空。因此,如果您只是为此计算联合,那是在浪费计算时间。

如果相反地给了您工会或无论如何都要使用它,则长度是最自然的方法。

但是,您只想知道它是否为空,因此可以使用length ls == 0代替take 1 ls == []。这样,Haskell(它是一种惰性语言)只需要计算第一个元素,而不是length所需的整个列表

编辑

正如@joseph所指出的,有一个Prelude函数来检查列表是否为空:null :: [a] -> Bool