Треки
/
Clojure
Clojure
/
Вправи
/
Операції з масивом
Операції з масивом

Операції з масивом

Середня

Вказівки

Реалізуйте базові операції з масивами.

У функціональних мовах такі операції з масивами, як length, map і reduce, трапляються дуже часто. Реалізуйте низку базових операцій з масивами, не використовуючи наявні функції.

Точна кількість і назви операцій, які потрібно реалізувати, залежать від конкретного треку, щоб уникнути конфліктів з наявними назвами, але загалом потрібно реалізувати такі операції:

  • append (отримавши два масиви, додати всі елементи другого масиву в кінець першого);
  • concatenate (отримавши низку масивів, поєднати всі елементи з усіх масивів в один плаский масив);
  • filter (отримавши предикат і масив, повернути масив усіх елементів, для яких predicate(item) є правдою);
  • length (отримавши масив, повернути загальну кількість елементів у ньому);
  • map (отримавши функцію і масив, повернути масив результатів застосування function(item) до всіх елементів);
  • foldl (отримавши функцію, масив і початковий акумулятор, згорнути (звести) кожен елемент у акумулятор зліва);
  • foldr (отримавши функцію, масив і початковий акумулятор, згорнути (звести) кожен елемент у акумулятор справа);
  • reverse (отримавши масив, повернути масив з усіма початковими елементами, але у зворотному порядку).

Зауважте, порядок, у якому аргументи передаються до функцій згортання (foldl, foldr), має значення.

Додаток

Note

Наведені вище інструкції синхронізовано зі спільним репозиторієм, щоб забезпечити узгодженість між усіма мовними треками. Цей додаток дає додаткові пояснення або змінює інструкції в міру потреби, щоб краще узгодити їх із цілями треку Clojure.

Для цієї вправи в треку Clojure вважайте, що і вхідні, і вихідні дані є векторами, як зазначено в тестах. Як додаткове завдання, поміркуйте, як реалізувати підхід, який не використовує списки на проміжних кроках.

Важливо не використовувати повторно наявні вбудовані функції Clojure зі схожою функціональністю, оскільки це применшило б заплановану навчальну цінність вправи. Ключові функції з простору імен clojure.core, яких варто уникати, включають into, concat, cat, lazy-cat, mapcat, flatten, filter, filterv, remove, count, map, mapv, reduce, transduce, reverse і rseq.

Необовʼязкові цілі

Необовʼязкова мета призначена для тих, хто хоче додаткового виклику, і розрахована на те, що основну мету вже виконано.

Спробуйте пройти тести, придумавши підхід, який припускає:

  • І вхідні, і вихідні дані є списками, а не векторами. Зауважте, що тести, як завжди, не потрібно змінювати.
  • Вектори не можна використовувати на проміжних кроках.

Якщо вирішите опублікувати це, обовʼязково додайте коментар, який зазначає, що це стосується необовʼязкової мети використання списків. Не забудьте оновити докстрінги!

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Clojure Exercism

Час розпочати Операції з масивом?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Clojure, а також 12 концепцій105 вправ та справжнє наставництво від людей, і все це безкоштовно.

Глибоке занурення у Операції з масивом!

Насолоджуйтеся практичним вступом до рекурсії, розгляньте імперативні та функціональні альтернативи «Операціям з масивом» і зануртеся в хвостову рекурсію та функції-акумулятори.