私は最近、いくつかの要素だけを覗き見するためにリストをまたぐ必要がありました。これは一種のフィルター関数ですが、それほど単純ではありません。しかし、最初に、ここでの歩みは何ですか。
リスト(またはトラバース可能なタイプ)をストライドすることは、リストを折りたたむことと同じですが、頻繁に出会う要素をいくつか破棄します(ストライド値に関して)。要素をピックオフすると、ピックオフする次の値が次のストライドになります。たとえば、ストライド値を0に設定してリストをストライドすると、実際にはリストは変更されません。リストを1つストライドすると、2つに1つの要素が得られます。
stride 0 [1..10] == [1..10]
stride 1 [1..10] == [1,3,5,7,9]
stride 2 [1..10] == [1,4,7,10]
見てみましたが、リストData.List
には何も見つかりませんでした。stride
だから私は自分とあなたをまたぐ関数を書いたのです!- もの:
import Data.DList
-- for Data.List
stride :: (Num a, Eq a) => a -> [b] -> [b]
stride s = toList . snd . foldl (\(sa,xa) x -> if sa == s then (0,xa `snoc` x) else (sa+1,xa)) (s,fromList [])
上記のように使用できます。Data.List
モジュールの一部として提案することは可能ですか?私はそれが大いに役立つと思います。