How does this compare to Specter? On Thursday, 23 February 2017 13:34:16 UTC-8, Alan Thompson wrote: > > Just came across this - it looks very cool! > Alan > > On Sat, Dec 10, 2016 at 7:14 AM, Timothy Baldridge <tbald...@gmail.com > <javascript:>> wrote: > >> I just released the first official version of Odin ( >> https://github.com/halgari/odin). Odin is a declarative, extensible >> query DSL for Clojure that leverages transducers to provide a high amount >> of generality while still maintaining acceptable performance. >> >> One of the biggest features of Odin is its ability to rapidly index and >> query "normal" Clojure data structures. Here is a quick example of this >> feature in practice: >> >> (let [orders [{:customer/name "Sam" >> :customer/id 3411} >> {:customer/id 3411 >> :order/items {1212 3}} >> {:customer/id 3411 >> :order/items {2232 2 4242 3}} >> {:item/id 1212 >> :item/price 40.0} >> {:item/id 2232 >> :item/price 100} >> {:item/id 4242 >> :item/price 1.99}]] >> (->> (o/for-query >> (o/and >> (d/query orders ?customer :customer/name "Sam") >> (d/query orders ?customer :customer/id ?id) >> (d/query orders ?order :customer/id ?id) >> (d/query-in orders ?order [:order/items ?item-id] ?qty) >> (d/query orders ?item :item/id ?item-id) >> (d/query orders ?item :item/price ?price)) >> (* ?qty ?price)) >> (reduce + 0))) >> >> ;; => 325.97 >> >> >> In this example we are given a vector of maps, we are then finding a >> customer by name, >> >> then walking a path through the data to find all the items that customer >> ordered, the >> >> total price is then calculated via the normal multiply and sum. >> >> >> There are several other features supported by Odin, including transformation >> of data >> >> (based on a query), tabling, Datomic support, and much more. >> >> >> I also did a video series on the development process of Odin if anyone is >> interested: >> (https://www.youtube.com/watch?v=JyKySmcTR4g) >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com >> <javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+u...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > >
-- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.