Например, если у меня есть понимание списка
comp :: Int -> Int -> Int -> [Int]
comp xs a b = [ y | x <- xs, y <- (func x a b) ]
, где func
- это просто функция
func :: Int -> Int -> Int -> [Int]
func x a b
| (x == a || x == b = [a,b]
| otherwise = filter (/=a) [a,b])
comp
, как правило, дает мне повторяющиеся значения из-за как мой func
работает.
то есть я могу получить comp = [1,2,2,3,3,4]
при прохождении произвольных a
и b
.
Мой вопрос: Есть ли способ, которым я могу только сохранить значения в этом списке, которые появляются более одного раза в пределах списка понимания ? Так что вместо этого я получаю comp = [2,3]
(поскольку 2
и 3
появляются более одного раза).
Я понимаю, что есть много способов сделать это вне понимания списка, но я хочу знать, возможно ли сделать это внутри. Или я мог бы даже использовать вспомогательную функцию для этого?