私が機能を持っていると言う
foo n = foo' 1 where
foo' n = foo' 1
foo' x = x : foo' (x + 1)
例として、n = 5とすると、foo'nの意味をfoo'5にすることは可能ですか?したがって、ループします。
私が機能を持っていると言う
foo n = foo' 1 where
foo' n = foo' 1
foo' x = x : foo' (x + 1)
例として、n = 5とすると、foo'nの意味をfoo'5にすることは可能ですか?したがって、ループします。
私はあなたが求めているのはこれだと思います:
foo n = foo' 1
where
foo' x | x == n = foo' 1
foo' x = x : foo' (x + 1)
パーツは| x == n
パターンマッチガードコンディションです。
Data.List の関数を使用してこれを行う簡単な方法があるようです
:m + Data.List
let mkList to count = (concat . replicate count) [1..to]
mkList 5 9
[1,2,3,4,5,1,2,3,4,5,1,2 ,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2 ,3,4,5,1,2,3,4,5]
mkList 1 10
[1,1,1,1,1,1,1,1,1,1]
レプリケートの代わりに、テイクとサイクルを使用することもできます
let mkList to count = take count $ cycle [1..to]
take と cycle は、戻ってリストを連結する必要がないため、コストが低くなります。
または、反復を使用することもできます
((take 10 $ iterate (+1) 0) == [0..9]) == True