シーケンスを折りたたみ、範囲に沿ったいくつかの点で中間値も知りたいとします。これは私はこのために使用したものである:この折りたたみと繰り返しのパターンは何ですか?
[a,b,c] = map fst . tail $ chain [g i, g j, g k] (zero, sequence)
g :: Integer -> (a,b) -> (a,b)
chain (f:fs) x = x : chain fs (f x)
chain [] x = [x]
機能g
は、いくつかの初期値から開始し、同じ結果を生成する、(等長i
、j
の)入力シーケンスの特定の部分を消費します次の呼び出しに供給される型。開始と同じ初期値から始まる異なる長さのためにシーケンスを数回消費することはもちろん、時間的にも空間的にも非効率的であろう。
したがって、この一連の整数(シーケンスの中間点)を折りたたみます。一方、この関数を繰り返し実行します(g
)。それは何ですか?私はここに何か基本的なものを欠いていますこれは折り返しのレパートリーなどで何とか表現できますか?
EDIT:解決済み :修正の繰り返しが実際にある修飾子のリストの上に折る方法 上記単に
[a,b,c] = map fst . tail $ scanl (flip g) (zero, sequence) [i, j, k]
面白いです。
あなたは基本的にscanlを意味しますか? http://www.haskell.org/hoogle/?hoogle=scanl – Marcin
@Marcinああ、はい、基本的なものです。おそらくそうだ。私を混乱させたのは、 'g'自体もシーケンスの上に折り畳まれていたということでした。私はスキャン機能が '(ゼロ、シーケンス)'と 'i'を組み合わせ、' [i、j、k] 'リストを直接スキャンすると思います...ありがとう、それを試みます! –