Я пытаюсь решить эту проблему. Эта функция принимает два параметра. Первая функция, возвращающая логическое значение, а вторая - список чисел. Предполагается, что функция должна удалить первое значение во втором параметре, которое возвращает true при запуске с первым параметром. Существует вторая функция, которая делает то же самое, за исключением того, что она удаляет последнее значение, которое удовлетворяет ему, а не первое. Я довольно уверен, что у меня есть логика, поскольку я тестировал ее на другом языке, и это сработало, моя единственная проблема заключается в переводе ее в синтаксис Haskell. Вот что у меня есть:Удалить первое значение в списке, отвечающем критерию
removeFirst :: (t -> Bool) -> [t] -> [t]
removeFirst p xs = []
removeFirst p xs
| p y = ys
| otherwise = y:removeFirst p ys
where
y:ys = xs
removeLast :: (t -> Bool) -> [t] -> [t]
removeLast p xs = []
removeLast p xs = reverse (removeFirst p (reverse xs))
Я побежал:
removeFirst even [1..10]
Но вместо того, чтобы [1,3,4,5,6,7,8,9,10], как и ожидалось, я получаю []. Что я делаю неправильно?
GHC должен поднять предупреждение о перекрывающихся шаблонах, если вы скомпилируете свой код с помощью '-Wall', указав на ошибку. – chi
Я сделал, но я не знал, что именно это означает, но он все еще скомпилирован. – Himself12794