【发布时间】:2015-06-12 00:04:38
【问题描述】:
我目前正在研究一个函数,它接受 2 个整数和一个列表作为参数,并返回一个列表,其中第一个列表的元素位于这 2 个整数之间的位置(函数 :: Int->Int->[ u]->[u])。例如:
>function 2 5 [1..10]
返回
[2,3,4,5]
上面的示例正在使用我当前的代码......但是如果我插入一个像 [0..] 这样的无限列表,它会返回一个“错误 - 垃圾收集无法回收足够的空间”。有什么建议? 这是代码
function :: Int->Int->[u]->[u]
function i j s
|i<0 = function 0 j s
|j< length s = function i j (init s)
|j-i< (length s)-1 = function i j (tail s)
|otherwise = s
【问题讨论】:
-
如果你不发布源代码,我们怎么知道你的实现哪里出错了?
-
你说得对,已编辑。我没有发布代码,因为我没有写一些东西来处理无限列表......
-
function有点奇怪;我们通常在 Haskell 中索引从0开始的列表,而不是从1开始。也就是说,您可以根据前奏函数drop和take轻松定义它,它们都可以在无限列表上正确运行。function start end = drop (start - 1) . take end. -
@Cirdec 差不多,但在这种情况下,如果我没记错的话,示例将是
[2,3,4,5,6]。
标签: haskell