Как проверить, является ли явное объединение двух множеств пустым? - PullRequest
0 голосов
/ 07 марта 2019

Ниже приведен мой код для явного объединения двух списков.Как бы я получить длину списка, а не сам список?

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 Ответ

2 голосов
/ 07 марта 2019

Объединение пусто тогда и только тогда, когда оба набора пусты.Поэтому, если вы вычисляете объединение только для этого, вы тратите впустую вычислительное время.

Если вместо этого вам дано объединение или вы все равно должны его использовать, длина - самый естественный метод.

Однако, поскольку вы хотите знать только, если он пуст, вместо length ls == 0 вы можете использовать take 1 ls == [].Таким образом, Haskell - так как это ленивый язык - должен вычислять только первый элемент, а не весь список, поскольку length потребует

Edit

Как указал @joseph,есть функция Prelude, чтобы проверить, является ли список нулевым: null :: [a] -> Bool

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...