Мне нужно извлечь из элементов списка нечетные позиции. В библиотеке Data.List я нашел что-нибудь. Поэтому я создал следующие функции. Я хотел бы знать, есть ли библиотека, которая содержит эти функции и другие подобные, и если можно значительно реорганизовать мои функции. Благодарю.Подсчет по логическому шаблону
extractByPattern p l = extractByPatternRaw bp l
where
bp = map (== 't') p
extractByPatternRaw p l = foldr select [] coupledList
where
coupledList = zip (concat . repeat $ p) l
select (b,x) acc
| b = x : acc
| otherwise = acc
oddPos = extractByPattern "tf"
-- ex. oddPos [1..20] == [1,3,5,7,9,11,13,15,17,19]
everyTwoAndFivePos = extractByPattern "ftfft"
-- ex. everyTwoAndFivePos [1..20] == [2,5,7,10,12,15,17,20]
Это один из случаев, когда понимание списка, по крайней мере, с моей точки зрения, легче читать: 'extractByPattern pattern list = [i | (i, t) <- zip list (шаблон цикла), t == 't'] ' – Zeta
@Zeta Ваше решение очень элегантно –
@Zeta:' [i | (i, 't') <- zip-лист (шаблон цикла)] 'работает. –