#haskell
#хаскелл
Вопрос:
drop1 n xs | nlt;0 = error "Use positive numbers" drop1 _ [] = error "Empty list" drop1 0 xs = xs drop1 n xs = drop1 (n-1)(tail1 xs)
Моя функция drop1 проверяет каждый раз. Что я могу сделать, чтобы проверить это только 1 раз в первый раз? Как я могу изменить эту часть: drop1 n xs | nlt;0 = error "Use positive numbers"
?
Ответ №1:
Вы можете работать с вспомогательной функцией:
drop1 :: Int -gt; [a] -gt; [a] drop1 n | n lt; 0 = error "Use positive numbers" | otherwise = go n where go _ [] = error "Empty list" go 0 xs = xs go k (_:xs) = go (k-1) xs
Таким drop1
образом , один раз проверяется, меньше ли значение 0
, тогда go
как проверяется только 0
значение и значения больше 0
.
Вероятно , вы хотите поменять местами два предложения о go _ [] = error "Empty list"
и go 0 xs = xs
, поскольку удаление двух элементов списка, содержащего два элемента, вероятно, должно возвращать пустой список, а не ошибку.