Fork me on GitHub
#clojure-russia
<
2016-08-31
>
maxim01:08:07

emacs - это не редактор, это операционка troll

wwall08:08:23

Всем привет. Вопрос - есть файл в котором сохранено состояние программы - примерно такого вида {1,2,{2,"sdf",3,{1},2}..{1,2},,,{2}} - т.е. записано все в список. Какой библиотекой проще парсинг сделать? И второй вопрос - к этому списку надо как-то добавить имена и типы хранящихся там данных. Как проще такое соответствие организовать?

yashaka10:08:28

может хватит просто (-> path slurp read-string) и все дела

yashaka10:08:12

——————————————————————— Такой вопрос. Сразу извиняюсь за кучу текста:) Вот есть такой классический способ в клоуже:

(-> [[1 2] [:a :b]] (get 1) first) ; => :a
сдесь (get 1) вместо second просто ради примера использования функции с более чем одним параметром) А мне нужен какой то такой вдобавок:
((fn-> (get 1) first) [[1 2] [:a :b]])
(что бы такую новосозданную функцию можно было куда то передать, и позже вызвать с нужным аргументом) реализация проста (может я правда что то не учел...):
(defmacro fn-> [& forms]
  `(fn [x#]
    (-> x# [email protected])))
Вопрос - есть идеи лучшего/более-очевидного имени? Оригинально я создал такую штуку c другим более очевидным именем:
(defmacro comp-> [& fns]
  `(comp [email protected](reverse fns)))
ну или так (если без макросов):
(defn comp-> [& fns]
   (apply comp (reverse fns)))
она удобна в тех случаях когда все функции, которые нужно скомпоновать в "натуральном порядке а не навыворот", - принимают только один параметр также такая реализация будет более удобной в случае использования анонимных функций:
((comp-> #(get % 1) first) [[1 2] [:a :b]]) ; => :a
против более “скобастого":
((fn-> (#(get % 1)) first) [[1 2] [:a :b]]) ; => :a
Это я веду к тому что наверное удобно иметь оба варианта... Как тогда оба эти назвать? Раньше я думал что comp-> это очевидно для простого "reversed comp", потому что стрелочка указывает на то что это тот же комп, но "составленный" последовательно с функций, поэтому и порядок изменится... Теперь я понимаю, что у "очевидности" могут ноги расти и из того, что стрелочка - это таки всем уже известный макрос, и приставка comp - просто говорит о том что мы компонуем функцию из того что и раньше можно было в стрелочку-макрос запихнуть... Но при той реализации для comp-> что я показал выше - это не верно... значит таки лучше реализовать comp-> как:
(defmacro comp-> [& forms]
  `(fn [x#]
    (-> x# [email protected])))
но тогда какое имя придумать для обычного "reversed comp"? - может просто rcomp какой то? другие идеи? 🙂 может есть другие "символы" которые могут быть очевидны как "инверсия"… ну или может таки забить нафиг на удобность
(defn comp-> [& fns]
   (apply comp (reverse fns)))

((comp-> #(get % 1) first) [[1 2] [:a :b]]) ; => :a
и оставить реализацию более скобастую и с ней уже и мириться:
(defmacro comp-> [& forms]
  `(fn [x#]
    (-> x# [email protected])))

((comp-> (#(get % 1)) first) [[1 2] [:a :b]]) ; => :a
? типа как оставить одну реализацию пускай иногда менее удобную - это более KISS...

yashaka10:08:36

вот здесь https://gist.github.com/yashaka/09264bfd8b933e6699cb7ea9c5d75957 в конец добавил юз кейс использования что-бы было понятно зачем мне такое заддротство 🙂

serega12:08:19

Привет, посоветуйте, пожалуйста, литературу для начинающих. Беглый поиск по слаку выдал: https://clojurians.slack.com/archives/clojure/p1472324784007268 и https://clojurians.slack.com/archives/clojure-brasil/p1472296674000070 сам планировал такое: http://eu.wiley.com/WileyCDA/WileyTitle/productCd-1119267277.html

maxim12:08:54

@serega clojure for brave and true

yashaka12:08:20

@mkaschenko как то пока не сильно понимаю как оно мне поможет… по крайней мере по доке к функции ("Apply a middleware function to routes after they have been matched.”) может еще нагуглю какие то примеры использования… и поразбираюсь в коде…. Но пока что мне кажется что эта штука в контексте “порядка” точно такая же как и обычное навешивание мидлвар… просто она позволяет навесить конкретно на один нужный хендлер… но порядок то все равно будет “навыворот”…

maxim12:08:41

я бы не заморачивался с порядком, привыкнешь 🙂

yashaka13:08:01

да вот даже не знаю 🙂 зачем привыкать, если можно реализовать более “естественно” 🙂

maxim13:08:18

а потому, что таких мест навалом

maxim13:08:13

где-то comp, где-то ->, где-то wrap-routes и т.д.

yashaka18:08:35

ну… comp и -> это базовые вещи. wrap-routes - это уже штука чисто заточенная под конкретную доменную область… А мой comp-> это тоже из разряда “базовых” вещей… в принципе без которой можно обойтись через использования просто ->

(POST "/login"  req (-> req params-request 
                              keyword-params-request 
                              handlers/do-login)))
а comp-> это просто такая удобная штука для создания функции для такого же контекста, которая мне кажется имеет право на сущестовование как и макрос -> без которого тоже ведь можно обойтись… хотя конечно можно и без нее 🙂 но привыкать к чему то, что запутанное, с кучей скрытой неочевидной магией внутри - это мне точно выглядит странным 🙂

romul20:08:27

кстати, на тему книг.. O'Reilly решила в честь 1 сентября сделать скидку 50% на все электронные книги: http://shop.oreilly.com/category/deals/b2s-special.do