2010-10-29 15:41:20 +00:00
|
|
|
|
# Clojure Koans
|
|
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Для того чтобы приступить к решению Clojure коанов, следуйте инструкциям ниже.
|
2010-01-15 01:13:17 +00:00
|
|
|
|
|
2010-05-27 18:22:26 +00:00
|
|
|
|
|
2018-03-13 12:11:09 +00:00
|
|
|
|
## Установка
|
2010-01-15 01:13:17 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Прежде всего клонируйте репозиторий или создайте свой форк. Далее вы можете создать отдельную ветку
|
2018-03-13 12:11:09 +00:00
|
|
|
|
чтобы избежать конфликтов при обновлении коанов.
|
2011-02-11 03:11:18 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Способы установки зависимостей:
|
2017-02-07 18:19:25 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
- Установите все зависимости локально
|
|
|
|
|
|
- Используйте Vagrant
|
|
|
|
|
|
- Используйте Docker
|
2017-02-07 18:19:25 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Инструкции для каждого для реализации каждого способа ниже.
|
2017-02-07 18:19:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
### Локальная установка
|
2017-02-07 18:19:25 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Вам необходимо:
|
2010-05-27 01:16:28 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
- JDK (от 6 до 8 версии)
|
|
|
|
|
|
- [Leiningen](http://github.com/technomancy/leiningen), инструмент сборки для Clojure
|
2010-05-27 18:22:26 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
После этого выполните в клонированной папке:
|
2010-05-27 01:16:28 +00:00
|
|
|
|
|
2017-05-03 20:27:23 +00:00
|
|
|
|
```
|
|
|
|
|
|
lein repl
|
|
|
|
|
|
```
|
2010-01-15 01:13:17 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Leiningen скачает все зависимости, затем наберите `(exit)` чтобы выйти.
|
2010-05-27 18:22:26 +00:00
|
|
|
|
|
2017-02-10 15:02:31 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
### Установка, используя Vagrant
|
2017-02-10 15:02:31 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Установите [Vagrant](https://www.vagrantup.com/) и
|
|
|
|
|
|
[VirtualBox](https://www.virtualbox.org).
|
|
|
|
|
|
В корневой директории выполните:
|
2017-02-10 15:02:31 +00:00
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
vagrant up
|
|
|
|
|
|
vagrant ssh
|
|
|
|
|
|
cd /vagrant
|
|
|
|
|
|
lein koan run
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
### Установка, используя Docker
|
2017-02-10 15:02:31 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Установите [Docker](https://www.docker.com/), затем выполните:
|
2017-02-10 15:02:31 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
для запуска коанов:
|
2017-02-10 15:02:31 +00:00
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
docker run --rm -it -v $(pwd):/app -w /app clojure lein koan run
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
для запуска REPL:
|
2017-02-10 15:02:31 +00:00
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
docker run --rm -it -v $(pwd):/app -w /app clojure lein repl
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
## Запуск коанов
|
2010-01-15 01:13:17 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Команда:
|
2012-10-23 14:30:40 +00:00
|
|
|
|
|
|
|
|
|
|
`lein koan run`
|
|
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Для запуска из REPL:
|
2017-02-07 18:21:40 +00:00
|
|
|
|
|
|
|
|
|
|
`(exec "run")`
|
|
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
В любом случае программа запустится и будет ожидать сохранения файла с коанами
|
|
|
|
|
|
и даст вам знать правильно ли было решение или нет.
|
|
|
|
|
|
Каждый коан сопровождён указаниями и направляющими вопросами.
|
2011-06-16 23:01:43 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Пример:
|
2010-11-01 18:13:48 +00:00
|
|
|
|
|
2013-02-26 02:47:02 +00:00
|
|
|
|
Now meditate on /home/colin/Projects/clojure-koans/src/koans/01_equalities.clj:3
|
2011-06-16 23:01:43 +00:00
|
|
|
|
---------------------
|
|
|
|
|
|
Assertion failed!
|
2010-11-01 18:13:48 +00:00
|
|
|
|
We shall contemplate truth by testing reality, via equality.
|
2011-06-16 23:01:43 +00:00
|
|
|
|
(= __ true)
|
2010-11-01 18:13:48 +00:00
|
|
|
|
|
2018-03-13 12:11:09 +00:00
|
|
|
|
Программа сообщает вам о том, что в файле `01_equalities.clj`, строка 3 тест не пройден
|
2018-03-13 11:33:53 +00:00
|
|
|
|
и коан не решён. Подумайте и внесите изменения!
|
2018-03-13 12:11:09 +00:00
|
|
|
|
Вам всегда будет предложено заполнить пустое место, обозначенное символами подчёркивания.
|
|
|
|
|
|
Иногда способов решения несколько, некоторые тесты успешно пройдут даже при замене символов подчёркивания
|
|
|
|
|
|
на пробел.
|
2010-11-01 18:13:48 +00:00
|
|
|
|
|
2018-03-13 12:11:09 +00:00
|
|
|
|
Коаны отличаются от TDD, т.к. тесты уже написаны за вас.
|
|
|
|
|
|
Следите за сообщениями о непройденном тесте — они будут появляться вплоть до решения всех коанов.
|
|
|
|
|
|
Соответственно при прохождении одного коана, вы увидите собщение об ошибке при прохождении следующего,
|
|
|
|
|
|
ещё не решённого вами коана. Вы решаете следующий и так далее, пока не решите последний.
|
2010-11-01 18:13:48 +00:00
|
|
|
|
|
2018-03-13 12:11:09 +00:00
|
|
|
|
Постарайтесь обдумывать ваше решение и вполне понимать почему правильный ответ именно таков.
|
|
|
|
|
|
Наслаждайтесь вашим путём к Clojure-просветлению!
|
2010-10-29 15:41:20 +00:00
|
|
|
|
|
2010-10-29 15:43:32 +00:00
|
|
|
|
|
2018-03-13 12:11:09 +00:00
|
|
|
|
## Используйте REPL
|
2010-11-02 01:12:00 +00:00
|
|
|
|
|
2018-03-13 12:11:09 +00:00
|
|
|
|
Помимо коанов, практикуйтесь и читайте документацию используя интерактивную командную строку:
|
2010-11-02 01:12:00 +00:00
|
|
|
|
|
2017-05-03 20:27:23 +00:00
|
|
|
|
```
|
|
|
|
|
|
lein repl
|
|
|
|
|
|
```
|
2010-11-02 01:12:00 +00:00
|
|
|
|
|
2018-03-13 12:11:09 +00:00
|
|
|
|
Вводите выражения и программа будет сразу выводить результат — это очень удобно и
|
|
|
|
|
|
ускоряет изучения языка.
|
2012-10-23 14:30:40 +00:00
|
|
|
|
|
2018-03-13 12:11:09 +00:00
|
|
|
|
Попробуйте ввести эти команды:
|
2010-11-02 01:12:00 +00:00
|
|
|
|
|
2011-09-24 17:45:43 +00:00
|
|
|
|
```clojure
|
|
|
|
|
|
(find-doc "vec")
|
|
|
|
|
|
(find-doc #"vec$")
|
|
|
|
|
|
(doc vec)
|
|
|
|
|
|
```
|
2010-11-02 01:12:00 +00:00
|
|
|
|
|
2018-03-13 12:11:09 +00:00
|
|
|
|
И эти:
|
2010-11-02 01:12:00 +00:00
|
|
|
|
|
2011-09-24 17:45:43 +00:00
|
|
|
|
```clojure
|
|
|
|
|
|
(doc doc)
|
|
|
|
|
|
(doc find-doc)
|
|
|
|
|
|
```
|
2010-11-02 01:12:00 +00:00
|
|
|
|
|
2018-03-13 12:11:09 +00:00
|
|
|
|
Для окончания работы с REPL используйте `CTRL-d`, `(exit)`, или `(quit)`.
|
2017-05-03 20:27:23 +00:00
|
|
|
|
|
2010-11-02 01:12:00 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
## Развитие
|
2010-10-29 15:43:32 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Убедитесь, что (`lein koan test`) пройдены и присылайте патчи в pull request.
|
2010-10-29 15:43:32 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Файл ideaboard.txt содержит различные идеи для реализации новых или изменения текущих коанов.
|
|
|
|
|
|
Ответы на упражнения пишите в `resources/koans.clj`!
|
2011-02-14 02:06:05 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Следуйте эти рекомендациям
|
|
|
|
|
|
http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html.
|
|
|
|
|
|
Для упрощения оценки ваших патчей, — сохраняйте код в feature ветку (не master) перед pull request.
|
2014-01-21 15:02:35 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Если у вас остались вопросы или нужны рекомендации,
|
|
|
|
|
|
связывайтесь со мной (Colin Jones / trptcolin) через Github или иным способом.
|
2010-10-29 15:43:32 +00:00
|
|
|
|
|
|
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
## Участники
|
2012-04-25 19:27:49 +00:00
|
|
|
|
|
|
|
|
|
|
https://github.com/functional-koans/clojure-koans/contributors
|
2011-02-08 13:23:08 +00:00
|
|
|
|
|
2010-10-29 15:41:20 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
## Благодарность
|
2010-10-29 15:41:20 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Эти упражнения создавались [Aaron Bedra](http://github.com/abedra)
|
|
|
|
|
|
[Relevance, Inc.](http://github.com/relevance) в начале 2010 как инструмент
|
|
|
|
|
|
для изучения функционального программирования для новичков.
|
|
|
|
|
|
Макрос-фу Аарона делали эти коаны доступными для использования и изучения языка,
|
|
|
|
|
|
а также для их дальнейшей разработки и улучшения.
|
|
|
|
|
|
Без инициативы со стороны Relevance Inc. этот проект не был бы осуществлён.
|
2010-10-29 15:41:20 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
Использование впервые [коанов](http://en.wikipedia.org/wiki/koan) в качестве метафоры
|
|
|
|
|
|
для обучающих упражнений было заслугой [Ruby Koans](http://rubykoans.com) от [EdgeCase](http://github.com/edgecase).
|
2010-10-29 15:41:20 +00:00
|
|
|
|
|
2010-11-01 18:27:48 +00:00
|
|
|
|
|
2018-03-13 11:33:53 +00:00
|
|
|
|
## Лицензия
|
2010-11-01 18:27:48 +00:00
|
|
|
|
|
|
|
|
|
|
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
|
2012-04-25 19:27:49 +00:00
|
|
|
|
the terms of this license.
|