Реалізуйте базові операції з масивами.
У функціональних мовах такі операції з масивами, як length, map і reduce, трапляються дуже часто.
Реалізуйте низку базових операцій з масивами, не використовуючи наявні функції.
Точна кількість і назви операцій, які потрібно реалізувати, залежать від конкретного треку, щоб уникнути конфліктів з наявними назвами, але загалом потрібно реалізувати такі операції:
append (отримавши два масиви, додати всі елементи другого масиву в кінець першого);concatenate (отримавши низку масивів, поєднати всі елементи з усіх масивів в один плаский масив);filter (отримавши предикат і масив, повернути масив усіх елементів, для яких predicate(item) є правдою);length (отримавши масив, повернути загальну кількість елементів у ньому);map (отримавши функцію і масив, повернути масив результатів застосування function(item) до всіх елементів);foldl (отримавши функцію, масив і початковий акумулятор, згорнути (звести) кожен елемент у акумулятор зліва);foldr (отримавши функцію, масив і початковий акумулятор, згорнути (звести) кожен елемент у акумулятор справа);reverse (отримавши масив, повернути масив з усіма початковими елементами, але у зворотному порядку).Зауважте, порядок, у якому аргументи передаються до функцій згортання (foldl, foldr), має значення.
Тести цієї вправи вимагають використання розширень, механізму, який дає змогу додавати нову функціональність до наявного класу, код якого ми безпосередньо не контролюємо, без потреби створювати підклас. Щоб дізнатися більше про те, як розширення реалізовано в Kotlin, загляньмо до офіційної документації.
Методи customFoldLeft і customFoldRight - це функції «згортки», концепція, добре відома у світі функціонального програмування, але куди менш відома в обʼєктно-орієнтованому.
Якщо потрібно більше довідкової інформації, загляньмо на цю сторінку про згортку.
Зареєструйтеся на Exercism, щоб вивчати й опановувати Kotlin, а також 88 вправ та справжнє наставництво від людей, і все це безкоштовно.
Насолоджуйтеся практичним вступом до рекурсії, розгляньте імперативні та функціональні альтернативи «Операціям з масивом» і зануртеся в хвостову рекурсію та функції-акумулятори.