Haskell - 函数不适用于无限列表

Haskell - Function not working with infinite lists

我写了一个函数,它以各种可能的方式将列表切成两半。 我的问题是我使用了 'lenght' 函数,因此它无法处理无限列表。 我想不出任何真正解决这个问题的方法。 知道我该如何解决这个问题吗?

示例:

splitList "home"= [("","home"),("h","ome"),("ho","me"),("hom","e"),("home","")]

我的代码:

splitList :: [a] -> [([a],[a])]
splitList a = splitList' a

splitList' ::  [a] -> [([a],[a])]
splitList' a =  take ((length a)+1)  (splitList'' 0 a)

splitList'' :: Int -> [a] -> [([a],[a])]
splitList'' i a = (splitAt i a) : splitList'' (i+1) a 

length a 将陷入无限列表的无限循环。因此,您将需要以另一种方式递归。您可以递归列表直到到达列表末尾,例如:

splitList :: [a] -> [([a],[a])]
splitList <b>[]</b> = [([], [])]
splitList <b>xa@(x:xs)</b> = ([], xa) : map … (splitList xs)

此处您需要填写 部分,其中对于 splitList xs 中的每个元组,您在每个 2 元组的第一项前面加上 x