Я изучал складки в течение последних нескольких дней. Я могу реализовать с ними простые функции, такие как length
, concat
и filter
. То, что я застрял, пытается реализовать с помощью функций foldr
, таких как delete
, take
и find
. Я реализовал их с явной рекурсией, но мне не кажется очевидным, как преобразовать эти типы функций в правые складки.
Я изучил уроки Грэма Хаттона и Берни Поупа. Имитируя Hutton dropWhile
, я смог реализовать delete
с помощью foldr
, но он терпит неудачу в бесконечных списках.
Из чтения Внедрить insert в haskell с foldr, Как эту функцию можно написать с помощью foldr? и Реализация возьмем с помощью foldr, казалось бы, мне нужно использовать foldr
для генерации функции, которая затем что-то делает. Но я действительно не понимаю эти решения и не имею идеи, как реализовать, например, delete
таким образом.
Не могли бы вы объяснить мне общую стратегию реализации с foldr
ленивыми версиями функций, подобных тем, которые я упомянул. Возможно, вы также можете реализовать delete
в качестве примера, так как это, вероятно, один из самых простых.
Я ищу подробное объяснение, которое может понять начинающий. Меня не интересуют только решения, я хочу развить понимание, чтобы сам мог придумать решения для подобных проблем.
Спасибо.
Изменить: В момент написания есть один полезный ответ, но это не совсем то, что я искал. Меня больше интересует подход, который использует foldr для генерации функции, которая затем что-то делает. У ссылок в моем вопросе есть примеры этого. Я не совсем понимаю эти решения, поэтому хотел бы получить дополнительную информацию об этом подходе.