Подсписок первых N элементов
Подсписок первых 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
Ответы (1 шт):
Если вам действительно так нужно завершить выполнение с ошибкой при неполном списке, но не при изначально пустом, перенесите рекурсию во вспомогательную функцию
take' :: Int -> [a] -> [a]
take' n _ | n <= 0 = []
take' _ [] = []
take' n xs = go n xs
where
go 0 _ = []
go n (x:xs) = x : go (n-1) xs
go _ _ = error "error"