私は完全な答えを試してあなたの楽しみを台無しにするつもりはないので、ゼロから始まるすべての有限で空でない連続した自然界の列挙という単純な問題を通して、既に自分で達成することに近いように思えます。キーステップはすでにenumIntSeqs
の中にありますが、そのようなリスト内包をネストする必要はありません。あなたは
[ {- etc. -} | x <- [0..] ]
...で始まる場合...あなたは、単に...
[ {- etc. -} | x <- [0..], let ys = [0..x] ]
を行うことによって、各x
のための新たなリストを生成することができます...そして、それらのリストを返す:
[ ys | x <- [0..], let ys = [0..x] ]
(私はys <- [0..x]
を書いていないことに注意してください。その場合に起こり、その後、GHCiの中でそれを確認どうなるかを予測するようにしてください。)
別々let
定義が不要であり、またそれは、この単純な理解で明確にするという点では何も追加しないので、私たちはただ書くことができます。
[ [0..x] | x <- [0..] ]
そして、それはそれです。
Prelude> take 4 $ [ [0..x] | x <- [0..] ]
[[0],[0,1],[0,1,2],[0,1,2,3]]
P.S .:列挙を書く他の2つの方法。 ...
someIntSeqs = do
x <- [0..]
return [0..x]
をdo記法を使用して...と、と(この場合はmap
と同じである)謙虚fmap
:
Prelude> take 4 $ fmap (\x -> [0..x]) [0..]
[[0],[0,1],[0,1,2],[0,1,2,3]]
Prelude> -- Or, equivalently...
Prelude> take 4 $ (\x -> [0..x]) <$> [0..]
[[0],[0,1],[0,1,2],[0,1,2,3]]
あなたの質問は非常に明確ではありません。 –