Реалізуйте базові операції з масивами.
У функціональних мовах такі операції з масивами, як length, map і reduce, трапляються дуже часто.
Реалізуйте низку базових операцій з масивами, не використовуючи наявні функції.
Точна кількість і назви операцій, які потрібно реалізувати, залежать від конкретного треку, щоб уникнути конфліктів з наявними назвами, але загалом потрібно реалізувати такі операції:
append (отримавши два масиви, додати всі елементи другого масиву в кінець першого);concatenate (отримавши низку масивів, поєднати всі елементи з усіх масивів в один плаский масив);filter (отримавши предикат і масив, повернути масив усіх елементів, для яких predicate(item) є правдою);length (отримавши масив, повернути загальну кількість елементів у ньому);map (отримавши функцію і масив, повернути масив результатів застосування function(item) до всіх елементів);foldl (отримавши функцію, масив і початковий акумулятор, згорнути (звести) кожен елемент у акумулятор зліва);foldr (отримавши функцію, масив і початковий акумулятор, згорнути (звести) кожен елемент у акумулятор справа);reverse (отримавши масив, повернути масив з усіма початковими елементами, але у зворотному порядку).Зауважте, порядок, у якому аргументи передаються до функцій згортання (foldl, foldr), має значення.
У Java найкращою практикою вважається використовувати методи екземпляра, а не методи класу. Однак бувають випадки, коли цілком доречно, щоб функція була static. Оскільки класи в Java закриті для модифікації (тобто ми не можемо додати члени до класу поза його визначенням, як це можна робити в інших мовах на кшталт Ruby чи JavaScript), ми не можемо додати класу нової поведінки напряму. Що робити, якщо ми все ж хочемо визначити поведінку для певного типу? У цьому випадку ідіоматичне рішення полягає в тому, щоб написати допоміжний метод.
Набори таких методів часто називають «допоміжними класами». До таких класів у JRE належать Arrays і Collections.
У цій вправі ми хочемо, щоб у List були методи map(), reduce(), filter() тощо. Але їх немає, тому ми використовуємо статичні методи.
Методи foldLeft і foldRight - це «згорткові» функції, концепція, добре відома у світі функціонального програмування, але менш відома в обʼєктно-орієнтованому. Загляньмо до сторінки Вікіпедії про згортку, щоб дізнатися загальні відомості і підказки щодо сигнатури та реалізації.
Зареєструйтеся на Exercism, щоб вивчати й опановувати Java, а також 26 концепцій158 вправ та справжнє наставництво від людей, і все це безкоштовно.
Насолоджуйтеся практичним вступом до рекурсії, розгляньте імперативні та функціональні альтернативи «Операціям з масивом» і зануртеся в хвостову рекурсію та функції-акумулятори.