Подтвердить что ты не робот

Обучение функциональному программированию /Clojure - практические упражнения?

Я изучаю функциональное программирование с помощью Clojure. Какие практические упражнения вы можете порекомендовать? Репозитории в Интернете с решениями будут идеальными.

Одна из идей, о которых я могу думать, - это использовать все популярные алгоритмы сортировки, деревья, графики и т.д. и реализовать их в Clojure сам. Хотя он может работать, он может быть довольно крутым, и я, вероятно, сделаю это неэффективно (по сравнению с тем, кто знает, что она делает).

4b9b3361

Ответ 1

Я бы рекомендовал выполнять упражнения Project Euler:

http://projecteuler.net/

Project Euler - это серия сложный математический/компьютерный проблемы программирования, которые потребуют больше, чем просто математическая информация решать. Хотя математика будет помочь вам прийти к элегантным и эффективных методов, использование компьютерные навыки и навыки программирования необходимо решить большинство проблем.

Поскольку многие программисты решают упражнения Project Euler, вы можете сравнить решения с другими (нефункциональными) языками программирования, но также доступны решения Clojure: http://clojure-euler.wikispaces.com/, поэтому вы можете противопоставить императив против функционального/идиоматического Clojure.

Конечно, вы узнаете больше всего, сначала сделав упражнения самостоятельно, не посоветовавшись ни с одним из решений.

Ответ 2

4clojure был запущен недавно. Это требует много вдохновения от функциональных коан и нескольких головоломок от 99 Lisp проблем; но он улучшается как с помощью обучения, для которого вам нужен только ваш браузер.

Проблемы различаются по сложности из языковых обучающих программ, таких как Каков второй элемент этого списка?, чтобы вызвать такие вопросы, как Можно ли расположить эти N слов так, чтобы каждый отличался от предыдущего одним максимум символом, и каждый день добавляется больше проблем.

Ответ 3

Попробуйте 99 Lisp Проблемы. Решения не находятся в clojure, но его нужно легко перевести.

Ответ 4

Недавно я начал изучать Clojure сам и нашел labrepl полезным.

Он позволяет вам ознакомиться с основами и REPL, содержит ряд упражнений и описывает довольно много неочевидных вещей, которые трудно найти в документации, так как вы еще не знаете, что ищете.

Рекомендуется.

Edit

Также Python Challenge - серия головоломок, которые могут быть решены несколькими строками программирования; решение головоломки дает вам URL-адрес для посещения следующей головоломки.

Хотя это не специально Clojure, головоломки довольно интересны, и хороший способ поднять ноги на любом новом языке IMHO. (Есть несколько головоломок, которые характерны для Python, но большинство из них нет. См. форум для подсказок Python Challenge Hints при застревании.)

Задача Python отличается от задач Эйлера более практичной и менее ориентированной на математику; задачи включают в себя такие функции, как фильтрация байтов изображения и последующие гиперссылки программно.

Ответ 5

Существуют некоторые функциональные коаны для Clojure: https://github.com/functional-koans/clojure-koans

Я не стал пытаться это сделать, но слышал хорошие отзывы.

Ответ 6

Как программист 1 раз по времени LISP, я нашел Clojure Koans https://github.com/functional-koans/clojure-koans чрезвычайно эффективным и методично обоснованным.

Используйте три окна (редактор + оценщик + repl) для мгновенной обратной связи, документации и экспериментов на лету.

Темы "учебника" хорошо организованы и постепенно вводят более сложные материалы. Разумеется, хорошая отправная точка, если у вас есть хотя бы некоторый опыт LISP.

Ответ 7

Я бы рекомендовал изучить код в clojure.contrib в github.

В качестве упражнения для обучения FP я бы рекомендовал просто писать приложения, в которых вы сейчас работаете, в Clojure, но не пытайтесь использовать какие-либо ссылки или циклы. Будьте целенаправленны для решения своих проблем с помощью рекурсии. Если вы считаете, что вам нужно использовать Ref или цикл, убедитесь, что вы можете объяснить, почему это так.

Ответ 8

http://exercism.io/ имеет несколько не так-тривиальных упражнений, они дают вам тест и описание, вы отправляете решение и рефакторинг глядя на код других людей, я настоятельно рекомендую его, плюс полиглот, который вы можете выполнять упражнения на любом языке программирования, который они поддерживают.

Как уже упоминалось, Project Euler - отличное место для начала. Но выберите хорошую книгу, которая научит вас основам и обоснованию реализации clojure, программирование clojure Стюартом Хэллоуей приходит на ум.

Как только вы закончите с этим Тимоти Болдридж предлагает несколько видеоуроков, где он анализирует core.async, преобразователи, логическое программирование и множество других забавных вещей, чтобы поиграть с: https://tbaldridge.pivotshare.com/

Ответ 9

Я настоятельно рекомендую Hackerrank, у него есть домен функционального программирования: https://www.hackerrank.com/domains/fp/intro

Вы можете проверить свои навыки не только с помощью clojure, но haskell, scala, erlang и многих других