我正在处理函数,它将2个整数和一个列表作为参数,并返回一个列表,其中包含第一个列表的元素,这些元素位于这两个整数之间的位置(函数:: Int-> Int - > [u] - > [U]).例如:
>function 2 5 [1..10]
Run Code Online (Sandbox Code Playgroud)
回报
[2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
上面的例子正在使用我当前的代码......但是如果我插入一个像[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
Run Code Online (Sandbox Code Playgroud)
您的实现问题是使用length.使用length无限列表作为参数不是一个好主意,因为,列表无限长.
我建议改变实现以使用可以在无限列表上工作的其他函数,例如drop和take:
function :: Int -> Int -> [a] -> [a]
function i j list = take (i - j + 1) (drop (i - 1) list)
Run Code Online (Sandbox Code Playgroud)
或者,无点:
function i j = take (j - i + 1) . drop (i - 1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |