0

私は Haskell を学んでいます。次のような関数があります。

takeN :: Integral a => a -> [a]
takeN n = take n [x | x<-[0..]]

私がこれをやりたいのは、無限のリストでn個の要素を返すことだけですが、なぜこれが機能しないのかわかりません。バインディングを放棄せずに修正する方法の説明 (?)

4

2 に答える 2

3

これが機能しない理由takeは、タイプがInt -> [a] -> [a]. 番号は である必要がありInt、任意であってはなりませんIntegral

次の方法で問題に対処できますfromIntegral

takeN :: Integral a => a -> [a]
takeN n = take (fromIntegral n) [x | x<-[0..]]
于 2016-03-04T20:52:17.120 に答える
0

独自の関数を作成しなくても実行できます: input>> take 3 [1..] output>> [1,2,3]

于 2016-03-04T20:52:36.837 に答える