Fork me on GitHub
#clojure-russia
<
2016-03-03
>
antonshwab12:03:16

Привет, ребята simple_smile Нубские вопросы можно здесь задавать или лучше в #C053AK3F9?

serioga12:03:39

любые можно simple_smile

antonshwab12:03:02

Короче. начал читать braveclojure. Там такая задача:

Write a function, mapset, that works like map except the return value is a set:
(mapset inc [1 1 2 2])
; => #{2 3}
Сначала решил так:
(defn mapset1
  [proc col]
  (set (map proc col)))

(mapset1 inc [1 2 3])
=> #{4 3 2} 
Потом вот так:
(defn mapset3
  [proc coll]
  (loop [items coll
         result #{}]
    (if (empty? items)
      result
      (recur (rest items) (conj result (proc (first items)))))))

(mapset3 inc [1 2 3 4])
=> #{4 3 2 5} 

larhat12:03:59

@antonshwab: теперь надо глянуть на reduce %)

antonshwab12:03:12

Вопрос 1: Почему set перемешивает элементы?

larhat12:03:33

set — структура данных с незаданным порядком сортировки

larhat12:03:44

(не только в кложе, а типа вообще)

antonshwab12:03:24

Т. е. всегда нужно выход сета запускать в сорт?

artemyarulin12:03:00

можно короче чутка (def mapset1 (comp set map)) да неа, в этом смысл сета - набор уникальных элементов без порядка

artemyarulin12:03:50

ну ладно чутка по другому - порядок undefined

artemyarulin12:03:58

есть вроде sorted-set

antonshwab12:03:10

Но ведь порядок не может быть случайным. Он наверное проходит по коллекции и сравнивает каждый элемент с остальными, чтобы оставить уникальные. Он что не попорядку идет?

larhat12:03:24

> (comp set map) этот вариант не учит особо ничему, я думаю упражнение про рекурсии (явные и предзаданные, типа reduce)

artemyarulin12:03:43

Ну это заместо (defn mapset1 [proc col] (set (map proc col)))

antonshwab12:03:57

да, я только начал) @larhat

artemyarulin12:03:10

как раз офигенно учит как добавлять функционал к уже существующим функциям

artemyarulin12:03:10

>Но ведь порядок не может быть случайным. Он наверное проходит по коллекции и сравнивает каждый элемент с остальными, чтобы оставить уникальные наверно проходит, а может и нет, а может завтра не будет. Порядок в сетах undefined и может быть любым

kronos_vano12:03:09

@antonshwab: например set может быть реализован в виде бинарного дерева, в рубях он когда-то был в виде мапа) может переделали

antonshwab12:03:23

@artemyarulin: А где можно посмотреть как реализована функция сет, всмысле как она работает?

larhat12:03:37

> как раз офигенно учит как добавлять функционал к уже существующим функциям думаю, там про композицию отдельно будут задачки :)

artemyarulin12:03:02

@larhat: Аа ну тогда да, может рано и впрям simple_smile

artemyarulin12:03:21

@antonshwab: дак исходники кложуры core.clj

artemyarulin12:03:52

а оттуда скорее всего в жаву класс какой. Я бы не забивал голову пока

antonshwab12:03:02

(defn set
  "Returns a set of the distinct elements of coll."
  {:added "1.0"
   :static true}
  [coll]
  (if (set? coll)
    (with-meta coll nil)
    (if (instance? clojure.lang.IReduceInit coll)
      (persistent! (.reduce ^clojure.lang.IReduceInit coll conj! (transient #{})))
      (persistent! (reduce1 conj! (transient #{}) coll))))) 

artemyarulin12:03:07

persistent! transient with-meta ^clojure.lang.IReduceInit я думаю пока рано да simple_smile

antonshwab12:03:14

ну да рано пока )

antonshwab12:03:39

ладно. Спасибо )

artemyarulin12:03:53

> :static true народ, а чо это значит?

artemyarulin12:03:26

не то чтобы я все остальные слова понял, но интересует вот это одно)

kronos_vano12:03:48

Кароче ничего)

artemyarulin12:03:38

а ну окай, спасибо

andfadeev12:03:27

брейвкложуре для затравочки норм заходит, но как по мне надо какуюнить более основательную книгу прочитать, например programming clojure

dottedmag12:03:23

А вот чего бы читать, когда знаком с тремя диалектами лиспа, пятью функциональными языками и двумя десятками императивных, clojure for brave and true уже пролистал, позёвывая, и нужно сесть и писать код для профита? Чтобы вот "библиотеки для того, библиотеки для этого, код класть сюда, собирать так, CI настраивать так, деплоить так, рефакторить вот такой шнягой к Emacs'у/Vim'у/whatever, линтер зовётся так, дебажить таким образом, а вот этот список фигни заброшен, его даже трогать не надо"

dottedmag12:03:55

Кроме как спрашивать каждый вопрос в слаке :)

kronos_vano12:03:04

Почему бы и не поспрашивать в слаке

antonshwab13:03:38

@dottedmag: а с какими диалектами лиспа вы знакомы? какие функциональные языки знаете? и зачем вам знать 20 императивных языков? Вы еще молодой на фотке Оо

asolovyov13:03:09

он как киану ривз

asolovyov13:03:23

а так уже скоро на покой

asolovyov13:03:00

@dottedmag: это кстати боль, пока не попробуешь все подряд, не узнаешь, что не надо юзать compojure, не надо юзать pedestal, и т.п.

antonshwab13:03:45

@asolovyov: Вот сюрприз для меня. А что нужно юзать для веба?

asolovyov13:03:19

@antonshwab: для маленьких приложений и compojure ок

andfadeev13:03:27

вооо, расскажи про компожуру, я вчера пытался понять что мне взять для матчинга урлов (чисто бекенд), компожа на слуху, тока ее юзал, почитал про биди

asolovyov13:03:32

а так - хз, я пока route-map юзаю, потому что он простой

asolovyov13:03:39

bidi мне не понравился, его тяжело читать

asolovyov13:03:53

мне очень нравится роутер из pedestal, но все остальное мне не нравится вообще

asolovyov13:03:13

ни интерсепторы, ни то, что к нему вебсокеты не прикрутишь, ни невнятные доки

asolovyov13:03:27

https://github.com/niquola/route-map маленький и возможно немножко бажный

asolovyov13:03:31

но зато очень все внятно

asolovyov13:03:34

там еще какие-то либы были

asolovyov13:03:55

я бы выбирал просто "легко читать" + "структура данных", все эти функциемакросы из компожуры меня раздражают

artemyarulin13:03:08

>компожуры меня раздражают ха, я думал я один такой - посмотрел бегло его, макросы кие-то, чота дофега всего, плюнул и сделал руками по быстрому 2 эндпоинта

andfadeev13:03:58

Да компожура простая как 2 копейки

artemyarulin13:03:32

ну хз, вот пример niquola/route-map я сразу понимаю, мне даже в сорсы лезть не надо чтоб понять как она это делает

rm13:03:46

присоединяюсь к любителям route-map ^_^ я его выбрал сначала вместо какой-то штуки на клиенте, вроде secretary, но я не уверен

artemyarulin13:03:16

кстати про изучение кложуры когда уже и так дофега знаешь - https://www.4clojure.com мне вот это понравилось, сразу практика

asolovyov13:03:14

там практика синтаксиса|стдлиба

asolovyov13:03:23

не практика best practices совсем

artemyarulin13:03:34

аа не понял вопроса значит, сорян

artemyarulin13:03:44

>не практика best practices совсем а где такое взять?

artemyarulin13:03:48

я бы посмотрел

prepor13:03:06

> Но ведь порядок не может быть случайным. Он наверное проходит по коллекции и сравнивает каждый элемент с остальными, чтобы оставить уникальные. Он что не попорядку идет? нет, не ходит 😉

prepor13:03:04

> [4:05] ни интерсепторы, ни то, что к нему вебсокеты не прикрутишь, ни невнятные доки "не нравятся" и "не надо использовать" немного разные вещи )

kronos_vano14:03:27

(defn -match кто мне скажет зачем тут "-" ?

rm14:03:56

приватная функция

kronos_vano14:03:29

а чем отличается defn- name и defn -name

rm14:03:33

а есть defn- ?

rm14:03:36

прикольно

rm14:03:43

в случае (defn -hello) именование явно показывает, что функция приватная

artemyarulin14:03:28

чота понял что ни разу не создавал приватные функции...

jetzajac14:03:00

а кто-нибудь использует boot для больших проектов? кажется это то, что нужно если процесс сборки становится сложным.

dottedmag15:03:17

@antonshwab: elisp, коммон и схема, ну и дальше.

dottedmag15:03:33

@asolovyov: Да ваще, песок сыпется.

larhat16:03:04

На митапе в рамблере есть кто?

andfadeev16:03:04

@rm, @kronos_vano почему (defn -hello) будет private? просто имя такое, обычная функция

kronos_vano16:03:48

Не знаю

kronos_vano16:03:54

я такое не говорил)

rm16:03:45

кажется, я наврал

rm16:03:48

ща проверю

rm16:03:30

и правда наврал

asolovyov19:03:20

@prepor: да, я для себя решил, что не надо использовать

antonshwab20:03:34

@prepor а как он работает? где почитать?

antonshwab20:03:30

после braveclojure какую книгу посоветуте. Я нашел 3 книги для начинющих, все с хорошими отзывами и рейтингами, одна чуть больше остальных. Какую выбрать посоветуете? Вот книги: http://www.amazon.com/Living-Clojure-Carin-Meier/dp/1491909048?tag=duckduckgo-d-20 http://www.amazon.com/Clojure-Programming-Chas-Emerick/dp/1449394701?tag=duckduckgo-d-20 http://www.amazon.com/Programming-Clojure-Stuart-Halloway/dp/1934356867?tag=duckduckgo-d-20

antonshwab20:03:18

Наверное нет смысла читать все книги одного уровня, поэтому хорошо бы одну выбрать)

andre20:03:08

@larhat: я был на митапе. ниочем, кроме комментариев @prepor, ну и про эрланг было чуть чуть смешно )

thickprogrammer20:03:34

на митапе народу было слишком много, пиццу схавали до того, как я туда добрался. про эрланг было весело

larhat21:03:37

А я не понял, чо смеялись

larhat21:03:52

Наверное мало выпил перед :(

ssesutchenkov21:03:40

про эрланг +1, и мне про elm интересно было - не смотрел на него раньше

prepor23:03:47

@andre: надо было знакомиться чатику!

prepor23:03:17

@antonshwab: сеты устроены так же как и перзистентные мэпы, вектора, в основе хитрые деревья. основная база заложена вот этим https://books.google.com.br/books/about/Purely_Functional_Data_Structures.html?id=SxPzSTcTalAC&amp;redir_esc=y&amp;hl=en

prepor23:03:32

в сети есть пачка более популярных докладиков

prepor23:03:50

@ssesutchenkov: не согласен с оптимизмом докладчика про элм ) в частности про роадмэп, вот последний топик про "где блин роадмэп", 10 января. https://groups.google.com/forum/#!searchin/elm-discuss/roadmap/elm-discuss/Kh3dImV4Xkg/DfrNfSb0BwAJ

prepor23:03:18

"I am currently working through a much bigger idea that I'll share list-only at the appropriate time."

prepor23:03:23

говорит автор

prepor23:03:20

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

prepor23:03:38

а если чуваки допилят https://github.com/bloomberg/bucklescript, то ну прям ваще