说我有这个功能
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
让 mkList 计数 = (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]
让 mkList 计数 = 计数 $ 循环 [1..to]
take 和 cycle 会更便宜,因为您不必返回并连接列表。
或者你也可以使用迭代
((take 10 $ iterate (+1) 0) == [0..9]) == True