2015-02-05 2 views
0

Я написал функцию, чтобы проверить, соответствует ли список условию, и если это так, оно дважды печатает это значение. Однако в ghc это дает мне ошибку, и я не понимаю, почему ...У вас возникли проблемы с функцией в Haskell

verifyList f xs = foldl(\x acc -> if f x then x:x:acc else acc) [] xs 

Любая помощь?

+4

«Тем не менее, в ghc это дает мне ошибку »- Какая ошибка? – bheklilr

+0

@bheklilr «Нет экземпляра для (Num [a0]), связанного с использованием« it » В строке интерактивной команды GHCi: напечатайте ее« – laker001

+2

Похоже, вы имели в виду 'foldr' вместо' foldl'. Если я сделаю это изменение, то это сработает для меня. – bheklilr

ответ

2

Похоже, вы имели в виду foldr вместо foldl. Если я сделаю это изменение, то это сработает для меня.

Вы могли бы также сделать это без складок, как

verifyList f xs = concatMap (\x -> [x, x]) $ filter f xs 

, который я бы сказал, более четко указывает свое намерение. Сначала отфильтруйте список, чтобы найти все, что удовлетворяет f, а затем дублируйте каждый элемент.

- bheklilr

Другой вариант основан на комментарий по leftaroundabout:

verifyList f xs = [y | x <- xs, f x, y <- [x, x]] 

Мой собственный спин на подходе bheklilr, потому что я чувствую, как он:

verifyList f xs = filter f xs <**> [id, id] 
Смежные вопросы