2017-08-12 11 views
5

何らかのパターンを循環する無限の関数リストが必要です。例えば:私はhaskellで関数のリストを繰り返す方法

fmap repeat [(+), (-)] 

ような何かを行う場合は[(+), (-), (+), (-), ...]

はその後、私はネストされたリスト[[a -> a -> a]]を取得します。このようなパターンに従った無限の関数リストを得るための最良の方法は何ですか?

+2

'concat(repeat [(+)、( - )])'を使用できます。 'fmap repeat'を実行しないと、マージしなければならない無限リストが複数得られます。おかげさまで – Bergi

+0

私は入れ子を避けるためにリストの内容を繰り返し適用できると思っていましたが、なぜそれがうまくいかないのか理解しています。 – northlane

答えて

13

何を探してるんですがcycle :: [a] -> [a]です:

cycle [(+),(-)]

この式のタイプがある:

Prelude> :t cycle [(+),(-)] 
cycle [(+),(-)] :: Num a => [a -> a -> a] 

cycleは、与えられたリストが何度も繰り返されているリストをリスト[a]を取り、生成し、もう一度。したがってcycle [1,2,3]が生成されます。[1,2,3,1,2,3,1,2,3,1,...]

関連する問題