说我有功能
foo n = foo' 1 where
foo' n = foo' 1
foo' x = x : foo' (x + 1)
例如,假设n = 5 是否有可能使foo'的含义成为foo'5?所以它会循环。
答案 0 :(得分:4)
我想你要求的是:
foo n = foo' 1
where
foo' x | x == n = foo' 1
foo' x = x : foo' (x + 1)
| x == n
部分是模式匹配保护条件。
答案 1 :(得分:1)
使用Data.List
中的函数似乎有一种更简单的方法代替cycle:m + Data.List
让mkList计数=(concat。复制计数)[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]
让mkList计数=取$ count [1..to]
take和cycle会更便宜,因为你不必返回并连接列表。
或者您也可以使用iterate
((take 10 $ iterate (+1) 0) == [0..9]) == True