Многопоточность в Clojure выведена на новый уровень развития, поскольку она реализует транзакции изменения памяти STM (Программная транзакционная система памяти).
В качестве демонстрации Рич Хики (благочестивый автор Clojure) и Дэвид Миллер (человек, написавший реализацию Clojure для .
Net) предлагают программу под названием «ant», которая имитирует муравейник.
Каждый муравей живет там в отдельном ручье.
Муравьи бегают по клеткам общего поля, собирают пищу, несут ее в муравейник и не конфликтуют друг с другом.
Я хочу поделиться результатами своих занятий с этой программой на всеобщее обозрение.
Надеюсь, эта статья будет полезна тем, кто начинает знакомиться с Clojure на платформе .
Net. Ссылки сначала: github.com/kemerovo-man/super-ants-clojure-clr youtu.be/xZ9AGQ3L-EI sourceforge.net/projects/clojureclr/files github.com/clojure/clojure-clr/blob/master/Clojure/Clojure.Source/clojure/samples/ants.clj Что было сделано мной.
1. Графика .
В оригинальной программе муравей — это просто черточка.
Мои насекомые изображены более естественно.
2. Новые герои .
Кроме муравьев у меня есть тля и божьи коровки.
3. Взаимодействие героев .
Трава растет, тля поедает траву, производит сахар и откладывает яйца (размножается).
Божьи коровки поедают тлю и яйца.
Муравьи избегают препятствий на пути.
(Муравьи также должны перетаскивать тлю на траву и не давать божьим коровкам поедать ее, но это еще не реализовано.
) 3. Поведение .
Поведение муравьев стало сложнее, они стали умнее, чем в оригинале.
Добавлено поведение новых героев.
4. Графики .
Динамика процессов видна на графиках.
Рост травы, количество тли, количество сахара в муравейнике и на прилегающей территории.
5. Примитивное увеличительное стекло вы можете посмотреть детали.
Правая кнопка мыши.
6. Мышь .
При нажатии на ячейку поля информация, содержащаяся в ячейке, отображается в консоли.
Колесо мыши можно использовать для изменения скорости движения насекомых.
Изменяя параметры инициализации, можно получить разные сценарии развития этой экосистемы.
Чем быстрее растет трава, тем быстрее размножается тля и тем больше сахара появляется на поле.
Трава не растет на сахаре, поэтому активная деятельность тли влияет на рост травы.
Различное соотношение насекомых при запуске (сколько тли, сколько божьих коровок, сколько муравьев) определяют новую динамику.
Каждое насекомое видит только четыре клетки: ту, на которой оно расположено, и три клетки перед собой, и ориентируется по ним.
Муравьи реагируют на след феромона.
Им очень важно не потерять муравейник, иначе они могут бесконечно бегать с едой в зубах, не находя, куда ее положить.
Я добавил несколько функций, связанных с феромонами, чтобы они могли эффективно ориентироваться, где еда, а где муравейник.
Ближе в коде.
Но я начну издалека.
Во-первых, вам необходимо ознакомиться с такими понятиями Clojure, как атом, агент и ссылка.
Их можно назвать менеджерами переменных.
Код обращается к значению переменной не напрямую, а через посредника.
Атом, агент и ссылка — это три типа посредников.
Здесь мы определили атом1, агент1 и ref1. Начальное значение для всех равно 0.(def atom1 (atom 0)) (def agent1 (agent 0)) (def ref1 (ref 0))
(swap! atom1 inc)
(prn @atom1)
;->1
(send agent1 inc)
(prn @agent1)
;->1
(dosync
(alter ref1 inc))
(prn @ref1)
;->1
Здесь мы передаем функцию inc атомам1, агенту1 и ref1, которая увеличивает значение на 1 и мы видим, что значения везде стали равны 1.
(reset! atom1 0)
(send agent1 (fn [_] 0))
(dosync
Теги: #clojure #ants #.
NET #многопоточность #программирование #.
NET #Lisp #clojure
-
30 Сумасшедших Обзоров В Google Play
19 Oct, 24 -
Новогодний Подарок Своими Руками
19 Oct, 24 -
Что Такое Ит-Сообщество?
19 Oct, 24