3要素のwindowをスライドする関数
↑タイトルの付け方が難しい
こんな挙動をする関数
code:input
code:output
1,2,3],2,3,4,3,4,5,[4,5,6 3要素のwindowをずらしていき、すべてのwindowの結果を返す
code:output
0,1,2],1,2,3,2,3,4,3,4,5,4,5,6,[5,6,0 再帰
code:hs
-- 1,2,3],2,3,4,3,4,5,[4,5,6 windows3 (a:b:c:rs) = a,b,c : windows3 (b:c:rs) windows3 _ = []
関数の組合わせ
code:hs
-- 1,2,3],2,3,4,3,4,5,[4,5,6 windows3 = filter ((>= 3) . length) . map (take 3) . tails
table:雑な解説
入力 [1,2,3,4]
tailsの出力 [[1,2,3,4], [2,3,4], [3,4], [4], []]
map (take 3)の出力 [[1,2,3], [2,3,4], [3,4], [4], []]
filterの結果 [[1,2,3], [2,3,4]]
リスト内包表記
code:hs
-- 1,2,3],2,3,4,3,4,5,[4,5,6 windows3 xs = [ x, y, z | (x:y:z:_) <- tails xs ] ちなみに、2次元リスト版
3 * 3のwindowをスライドする
code:hs
-- >>> windows33 1,2,3,4],5,6,7,8,9,10,11,12,[13,14,15,16 -- [
-- [
-- ],
-- [
-- ]
-- ]
windows33 = map (map concat . transpose . map windows3) . windows3
-- windows33 = map (map concat . transpose . map windows3) . windows3