This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-09-14
Channels
- # aws-lambda (5)
- # beginners (38)
- # boot (197)
- # carry (7)
- # clara (3)
- # cljs-dev (7)
- # cljsjs (6)
- # cljsrn (24)
- # clojure (39)
- # clojure-art (10)
- # clojure-austin (7)
- # clojure-dusseldorf (1)
- # clojure-italy (8)
- # clojure-russia (89)
- # clojure-spec (119)
- # clojure-taiwan (1)
- # clojure-uk (19)
- # clojurescript (104)
- # community-development (2)
- # conf-proposals (22)
- # copenhagen-clojurians (8)
- # cursive (2)
- # datomic (35)
- # devcards (4)
- # dirac (79)
- # euroclojure (2)
- # immutant (35)
- # om (138)
- # om-next (2)
- # onyx (172)
- # proton (4)
- # protorepl (1)
- # re-frame (36)
- # reagent (34)
- # spacemacs (1)
- # specter (7)
- # untangled (89)
- # yada (2)
у нас же не хаскель. а раз идет работа с графом, почему бы не взять вектор атомов?
[<atom> <atom> <atom> ...]
, где atom узел дерева с изменяемыми свойствами {:id <int>, :value <any>, :left <int>, :right <int>}
Для работы с графами есть отличная библиотека https://github.com/Engelberg/ubergraph, если руками самому надо что-то легковесное - самый просто способ сделать список смежности как в этой статье (http://hueypetersen.com/posts/2013/06/25/graph-traversal-with-clojure/), его очень просто обрабатывать
еще очень полезно для прокачки кунг-фу порешать на hackerrank’е задачки на графы (https://www.hackerrank.com/domains/algorithms/graph-theory/difficulty/all/page/1) и на функциональные структуры данных (https://www.hackerrank.com/domains/fp/ds/difficulty/all/page/1), они с незапяматных времен принимают решения на кожуре
подскажите, есть функция, нужно проанализировать ее формы и выполнить в рантайме определенные действия. допустим если в этой функции есть форма выполнения определенного символа , записать это в список
ничо не понял, можно пример что на входе и что ты хочешь на выходе? @andre
я хочу проанализировать эту функцию и если в ней есть формы вызовов интересующие меня, в рантайме добавить это в список
веровно непонятно? ну т.е. я в рантайме хочу иметь информацию что етсь такая то функция и она может сделать такие то вызовы
конкретно, есть re-frame приложение, у него есть view, которая может содержать подписку на стейт subscribe и может диспатчить евенты dispatch, я хочу получить объект views условно в котром будут эти вью и их подписки и диспатчи
Т.е. ты хочешь прочитать сорс функции грубо говоря и узнать есть в нем вызов нужной тебе другой функции?
т.е. все обновляется во время работы приложения, ожно быстро посмотреть стейт и вычисление сабскрипшенов, но было бы приколько если посмотреть view и на что они подписаны и что диспатчат
макрос
макрос создан как раз для таких косты… хотелок
эм дак передай?
а понял, да если ты передашь символ то толку мало, если заэвалишь символ то не будет сорса
ааа, дошло! Поэтому народ делает всякие defui из ом-некста. Т.е. да - надо делать свой макрос my-defn чтоб был доступ к сорсам
а тебе нужно обязательно из самой программы это получать? Можно написать просто стороннюю прогу которая прочитает твой core.clj и найдет все вызовы чего тебе надо
прочитать файл в AST очень легко через cljs.tools.reader/read-string
ага , нужно в программе, т.е. результат должен в этом рантайме быть, программа будет взаимодействовать с этим потом, т.е. меняя стейт re-frame эти данные будут обновляться в этом идея
понял, ну тогда my-defn единственный путь
ну я так просто назвал, я имею ввиду то что ты наверно уже сделал - обернуть в макрос
а в чем неудобство то кста?
извините не удержался 🙂
неа, хз вообще про курсив
а покаж сорс кста?
как ты макрос сделал
не знаю чем помочь но вот например defui из ома https://github.com/omcljs/om/blob/53268aae80c384d22d7b919a8304ea4e9806844b/src/main/om/next.cljc#L257-L313
т.е. макрос должен вернуть несколько форм получается?
помнится делал такое, вроде как можно через (do form1 form2 formN)
т.е. он должен вернуть то что должно было до него без изменений и добавить несколько действий
(do (def a 1) (def b 2))
ну это работает, поэтому и твое тоже должно сработать
помню там была какая-то магия по поводу возврата нескольких форм, или это просто когда ты эвалишь символы, не помню уже. Делай через ду - оно точно будет работать
чиркани потом сюда с результатом - интересно чо получится
в смысле? там можно писать макросы?
просто т.к. я только начал с макросами вообще работать, я не понимаю у меня ошибка в макросе или это просто фигвил пытается его перегрузить неправильно и нужно рестартовать компиляцию заново каждый раз, что долго
ааа, ты про это, хз уже не помню, я макросы как-то отдельно дебажу в кложуре режиме
смысл тебе в фигфил и вообще в CLJS прыгать то - ты ж можешь и так все в репле протестировать без контекста ре-фрейма или что там у тебя
@andre https://clojure.github.io/clojure/clojure.walk-api.html, postwalk в частности
либо зиппер)
postwalk немного не то, т.к. он поэлементно проходит, а мне нужно соседей еще, параметры вызова
@andre: ты хочешь, чтобы клиентский апп загрузился в браузере, подтянул данных и на их основе собрал ui+логику работы+описание запросов к беку?
хочу чтобы проанализировался сорс код, потом аппа запустилась и заполнились данные из результата анализа кода и эти данные отобразились в UI и во время работы аппа взаимодействовала с этими данными
@artemyarulin tree-seq вроде подошел
Вопрос к знатокам, как думаете, что правильнее, взять какой java класс или дернуть какую консольную утилиту. Я всю программерскую жизнь делал чтобы “работало везде”. А сейчас полюбил использовать clojure.java.shell
и не париться. Вот нужно zip сделать - полез вспоминать как это на джаве и понял что “да ну нах”. Дернул zip output inputs
и как же просто и хорошо! Что думаете, где грабли? Или правильно делаю?