A set of exercises for learning Clojure
Find a file
2018-03-15 16:43:21 +03:00
resources Use an explicit function argument for iterate 2017-10-09 13:17:12 -05:00
script Bump to 0.5.0 2014-10-09 08:31:38 -05:00
src/koans Update 03_lists.clj 2018-03-15 16:38:20 +03:00
.gitignore Added Vagrant support (#123) 2017-02-07 12:19:25 -06:00
epl-v10.html Include Eclipse license v10 (same as Clojure itself). 2010-11-01 14:27:48 -04:00
ideaboard.txt Improve some of the quote descriptions 2016-05-12 10:41:09 -05:00
project.clj Bump lein-koan dependency 2017-10-24 11:22:42 -05:00
README.md Update README.md 2018-03-15 16:43:21 +03:00
Vagrantfile Added Vagrant support (#123) 2017-02-07 12:19:25 -06:00

Clojure Koans

Для того чтобы приступить к решению Clojure коанов, следуйте инструкциям ниже.

Установка

Прежде всего клонируйте репозиторий или создайте свой форк. Далее вы можете создать отдельную ветку чтобы избежать конфликтов при обновлении коанов.

Способы установки зависимостей:

  • Установите все зависимости локально
  • Используйте Vagrant
  • Используйте Docker

Инструкции для каждого для реализации каждого способа ниже.

Локальная установка

Вам необходимо:

  • JDK (от 6 до 8 версии)
  • Leiningen, инструмент сборки для Clojure

После этого выполните в клонированной папке:

lein repl

Leiningen скачает все зависимости, затем наберите (exit) чтобы выйти.

Установка, используя Vagrant

Установите Vagrant и VirtualBox. В корневой директории выполните:

vagrant up
vagrant ssh
cd /vagrant
lein koan run

Установка, используя Docker

Установите Docker, затем выполните:

для запуска коанов:

docker run --rm -it -v $(pwd):/app -w /app clojure lein koan run

для запуска REPL:

docker run --rm -it -v $(pwd):/app -w /app clojure lein repl

Запуск коанов

Команда:

lein koan run

Для запуска из REPL:

(exec "run")

В любом случае программа запустится и будет ожидать сохранения файла с коанами и даст вам знать правильно ли было решение или нет. Каждый коан сопровождён указаниями и направляющими вопросами.

Пример:

Now meditate on /home/colin/Projects/clojure-koans/src/koans/01_equalities.clj:3
---------------------
Assertion failed!
We shall contemplate truth by testing reality, via equality.
(= __ true)

Программа сообщает вам о том, что в файле 01_equalities.clj, строка 3 тест не пройден и коан не решён. Подумайте и внесите изменения! Вам всегда будет предложено заполнить пустое место, обозначенное символами подчёркивания. Иногда способов решения несколько, некоторые тесты успешно пройдут даже при замене символов подчёркивания на пробел.

Коаны отличаются от TDD, т.к. тесты уже написаны за вас. Следите за сообщениями о непройденном тесте — они будут появляться вплоть до решения всех коанов. Соответственно при прохождении одного коана, вы увидите собщение об ошибке при прохождении следующего, ещё не решённого вами коана. Вы решаете следующий и так далее, пока не решите последний.

Постарайтесь обдумывать ваше решение и вполне понимать почему правильный ответ именно таков. Наслаждайтесь вашим путём к Clojure-просветлению!

Используйте REPL

Помимо коанов, практикуйтесь и читайте документацию используя интерактивную командную строку:

lein repl

Вводите выражения и программа будет сразу выводить результат — это очень удобно и ускоряет изучение языка.

Попробуйте ввести эти команды:

(find-doc "vec")
(find-doc #"vec$")
(doc vec)

И эти:

(doc doc)
(doc find-doc)

Для окончания работы с REPL используйте CTRL-d, (exit), или (quit).

Развитие

Убедитесь, что (lein koan test) пройдены и присылайте патчи в pull request.

Файл ideaboard.txt содержит различные идеи для реализации новых или изменения текущих коанов. Ответы на упражнения пишите в resources/koans.clj!

Следуйте эти рекомендациям http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html. Для упрощения оценки ваших патчей, — сохраняйте код в feature ветку (не master) перед pull request.

Если у вас остались вопросы или нужны рекомендации, связывайтесь со мной (Colin Jones / trptcolin) через Github или иным способом.

Участники

https://github.com/functional-koans/clojure-koans/contributors

Перевод на русский язык

Alex Gorelov

Благодарность

Эти упражнения создавались Aaron Bedra Relevance, Inc. в начале 2010 как инструмент для изучения функционального программирования для новичков. Макрос-фу Аарона делали эти коаны доступными для использования и изучения языка, а также для их дальнейшей разработки и улучшения. Без инициативы со стороны Relevance Inc. этот проект не был бы осуществлён.

Использование впервые коанов в качестве метафоры для обучающих упражнений было заслугой Ruby Koans от EdgeCase.

Лицензия

The use and distribution terms for this software are covered by the Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can be found in the file epl-v10.html at the root of this distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license.