前 n 个元素的子列表,从零开始。数字 n 作为第一个参数传递,原始列表作为第二个参数传递。空列表返回任何数字的空列表。提供元素数小于 n 值的情况。以任何合理的方式解决它。该列表可能无穷无尽。 我得到了函数本身,但我不能在那里插入一个条件,如果 n 大于列表中的元素数会发生什么。问题是不能使用卷积函数。如何解决这种情况?
length' :: [a] -> Int
length' [] = 0
length' (x:xs) = length' xs + 1
take' :: Int -> [a] -> [a]
take' n _ | n <= 0 = []
| (n > (length' xs)) = error "error!!!"
take' _ [] = []
take' n (x:xs) = x : take' (n-1) xs
如果您确实需要在列表不完整但最初不是空的时崩溃,请将递归移动到辅助函数