1
我需要從列表中提取奇數位置的元素。在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 | (我,'噸')< - 郵編列表(循環模式)]'也可以。 –