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