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

问题描述 投票:0回答:1

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

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
haskell functional-programming
1个回答
2
投票

当且仅当两个集合都为空时,联盟才是空的。因此,如果你正在为此计算联盟,那么你就是在浪费计算时间。

如果相反你给了工会或者必须使用它,长度是最自然的方法。

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

Edit

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

© www.soinside.com 2019 - 2024. All rights reserved.