下面是我的两个列表的显式联合的代码。如何获得列表的长度而不是列表本身?
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
当且仅当两个集合都为空时,联盟才是空的。因此,如果你正在为此计算联盟,那么你就是在浪费计算时间。
如果相反你给了工会或者必须使用它,长度是最自然的方法。
但是,你只想知道它是否为空,而不是length ls == 0
你可以使用take 1 ls == []
。这样Haskell - 因为它是一种懒惰的语言 - 只需要计算第一个元素,而不是length
需要的整个列表
正如@joseph指出的那样,有一个Prelude函数来检查列表是否为空:null :: [a] -> Bool