This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2017-09-18
Channels
- # aleph (45)
- # aws (4)
- # beginners (56)
- # boot (2)
- # cider (45)
- # clara (2)
- # cljs-dev (9)
- # cljsrn (31)
- # clojure (71)
- # clojure-dusseldorf (8)
- # clojure-gamedev (1)
- # clojure-italy (22)
- # clojure-nl (1)
- # clojure-russia (46)
- # clojure-sg (1)
- # clojure-spec (5)
- # clojure-uk (40)
- # clojurescript (30)
- # community-development (3)
- # cursive (17)
- # data-science (1)
- # datomic (18)
- # emacs (3)
- # figwheel (1)
- # fulcro (19)
- # hoplon (12)
- # jobs (5)
- # leiningen (42)
- # off-topic (12)
- # om (2)
- # onyx (41)
- # re-frame (19)
- # ring-swagger (1)
- # rum (3)
- # shadow-cljs (4)
- # specter (7)
- # unrepl (2)
- # vim (25)
- # yada (24)
можешь и абстрактный интерфейс сделать - заведи свой (defprotocol, в нем пропиши нужные тебе операции
а потом (deftype T [k a ss] ... clojure.lang.IPersistentCollection << реализации стандартных conj и т.п. >> YouProtocolName <<реализации твоих кастомных операций>>)
Спасибо, сейчас сделал через наивную мапу с 3 ключами, пытаюсь реализовать нужные алгоритмы
ну так в том то и суть, что (defrecord T [k a s]) сгенерирует классик, с которым можно работать как с мэпой
просто если в него ложить только для этих ключей (:k, :a, :s в данном случае) оно не будет реально запихивать все в хеш мепу, а положит как поле класса (что быстрее)
так что замена тривиально - делаешь (defrecord T ...), а потом вместо {:k "key" :val 123} пишешь (->T "key" "123") или (map->T {:k "key" :val 123})
Хорошо, сейчас уже весь код написан с использованием абстракции 3-ключевой мапы, отлажу алгоритм на ней а потом поменяю на рекорды для скорости
Т.е. по-Хаскельному говоря, это трехэлементный кортеж, или изоморфный ему тип с 3 полями. Да, Кложа поначалу очень неудобный Хаскель... 🙂
чтобы иметь иерархическую структуру (дерево) с данными в каждом узле, с любым числом дочерних узлов каждой ветки и с идентификатором узлов/листьев
конкретно мне требовалась для реализации свертки плоского результата SQLзапроса в иерархическую структуру для ответа GrqphQL
мне, наверное, интересно, зачем свою такую писать, если может быть глубокая мапа по перфомансу и апи может быть не будет отличаться
вики только на хаскель ссылается, что, мне кажется, выглядит как "детали имплементации", а не как "супер специальная крутая структура данных"
1. Затем что я спрашивал и выбирал, мне подсказали так. 2. В мапе как ты сделаешь список любой длины (дочерние ноды)? Списком? - это оно самое. Мапой - а нафига, еще ключи выдумывать
Я вообще пока в Кложных датаструкчах путаюсь. Вектора тоже можно, да. В данном случае то же самое что списки будет
Просто мне бул нуже хэд/тэйл, и добавка в голову - а это список. В Хаскеле даже думать не надо 🙂 Да и хвост аргументов функции в Кложе про умолчанию трактуется как список. Хотя это обобщенные типы типа Лезисеков и прочего я действительно не раскурил еще.
А, да, и мап по структуре. По мапу в Кложе можно мап запускать? Вот и я не хотел запасаться граблями, а взял то что надежнее 🙂
Не, такой хоккей нам не нужен - это не то поведение. А мапить дочерние узны одним мапом как функтор очень часто надо
(let [L (list :a :b (list :c :d))
V [:a :b [:c :d]]
M {0 :a 1 :b 2 {0 :c 1 :d}}]
[(get-in L [2 0])
(get-in V [2 0])
(get-in M [2 0])])
=> [nil :c :c]
Просто в Хаскеле вектор не так просто юзать, синтаксис неудобный, и не фьюзится и еще 100 причин где можно применять списки - вот и мышление еще на АТД и списках 🙂 Хотя пару дней плотно пописал на Кложе - как же неудобно, что нет проверок типов и вообще типов 🙂
кложа бета 1, everyone! https://groups.google.com/forum/#!msg/clojure/UEtE1K9C7XE/5p5BJe2tAQAJ
всем привет. сорри за маленький оффтоп. кто в Украине, есть какая инфа по devfest в Львове в этом октябре. как сейчас с проездом из России, без проблем? (что-то боязно) что еще интересного из конференций будет этой осенью, посоветуйте, fp и не только. мертвый сезон вроде как а вот движухи захотелось
Clojure 1.9.0-beta1 is now available