Alan, đź‘Ť

On Tuesday, September 27, 2016 at 7:38:29 AM UTC+7, Alan Thompson wrote:
>
> Hi - I was answering a question on StackOverflow, and after solving it 
> using functions from clojure.core, I thought it was the  prefect candidate 
> for a little DataScript.  Basically the user wants to do a "natural join" 
> on column :obs/A, then print out pairs of :obs/value from type :x and type 
> :y.  The DataScript version removes a lot of tedious, manual indexing, 
> filtering, unification, etc.
>
>
> (ns clj.core
>   (:require [tupelo.core :as t] 
>             [datascript.core :as d]
>             [clojure.set :as set] ))
> (t/refer-tupelo)
>
> (def data
>   [ {:type :x :local/id 1,   :obs/A "11",    :obs/value 2.0,   
>  :obs/color "yellow"}
>     {:type :x :local/id 2,   :obs/A "12",    :obs/value 4.0,   
>  :obs/color "blue"}
>     {:type :x :local/id 3,   :obs/A "13",    :obs/value 3.0,   
>  :obs/color "green"}
>     {:type :x :local/id 3,   :obs/A "15",    :obs/value 7.0,   
>  :obs/color "red"} 
>
>     {:type :y :local/id 2,   :obs/A "11",    :obs/value 7.0,   
>  :obs/shape "square"}
>     {:type :y :local/id 2,   :obs/A "13",    :obs/value 4.0,   
>  :obs/shape "circle"}
>     {:type :y :local/id 6,   :obs/A "15",    :obs/value 3.0,   
>  :obs/shape "triangle"} ] )
>
> (newline) (println "data") (pretty data)
>
> (def conn (d/create-conn {}))
> (d/transact! conn data)
>
> (def labelled-result
>   (d/q '[:find ?a ?value1 ?value2
>              :where 
>                [?ex :type :x] [?ex :obs/A ?a] [?ex :obs/value ?value1]
>                [?ey :type :y] [?ey :obs/A ?a] [?ey :obs/value ?value2]
>             ] @conn ))
> (newline) (println "labelled-result") (pretty labelled-result)
>
> (defn -main [& args] )
>
> ​With the result:
>
>
> ​
>
>
> data
>
> [{:type :x,
>
>   :local/id 1,
>
>   :obs/A "11",
>
>   :obs/value 2.0,
>
>   :obs/color "yellow"}
>
>  {:type :x,
>
>   :local/id 2,
>
>   :obs/A "12",
>
>   :obs/value 4.0,
>
>   :obs/color "blue"}
>
>  {:type :x,
>
>   :local/id 3,
>
>   :obs/A "13",
>
>   :obs/value 3.0,
>
>   :obs/color "green"}
>
>  {:type :x, :local/id 3, :obs/A "15", :obs/value 7.0, :obs/color "red"}
>
>  {:type :y,
>
>   :local/id 2,
>
>   :obs/A "11",
>
>   :obs/value 7.0,
>
>   :obs/shape "square"}
>
>  {:type :y,
>
>   :local/id 2,
>
>   :obs/A "13",
>
>   :obs/value 4.0,
>
>   :obs/shape "circle"}
>
>  {:type :y,
>
>   :local/id 6,
>
>   :obs/A "15",
>
>   :obs/value 3.0,
>
>   :obs/shape "triangle"}]
>
>
> labelled-result
>
> #{["13" 3.0 4.0] ["11" 2.0 7.0] ["15" 7.0 3.0]}
>
>
> Cool stuff.
>
> Alan​
>
>
>
>

-- 
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.

Reply via email to