Skip to content

Instantly share code, notes, and snippets.

View terjesb's full-sized avatar

Terje Sten Bjerkseth terjesb

  • Outnordic
  • Norway
View GitHub Profile
@terjesb
terjesb / gist:2724077
Created May 18, 2012 08:57 — forked from swannodette/gist:2719676
unify_datums.clj
(ns datomic-play.core
(:use [datomic.api :only [db q] :as d])
(:require [clojure.core.logic :as l]
[clojure.pprint :as pp]))
(def uri "datomic:dev://localhost:4334/hello")
(defprotocol IUnifyWithDatum
(unify-with-datum [u v s]))
@terjesb
terjesb / restrict-map.clj
Created May 30, 2012 14:38 — forked from cgrand/restrict-map.clj
Restricting nested maps to keys of interest
;; I could have used a closed dispatch (aka cond) but you may find this version more enjoyable
;; the spec format is the one provided by BG
(defprotocol Selector
(-select [s m]))
(defn select [m selectors-coll]
(reduce conj {} (map #(-select % m) selectors-coll)))
(extend-protocol Selector
@terjesb
terjesb / gist:2931183
Created June 14, 2012 16:02 — forked from stuarthalloway/gist:2002582
Datomic extent query
;; Datomic example code
;;
;; The extent of entity ?x is all datoms that are about ?x.
;; Drop this into your rules.
;;
;; Demonstrates
;;
;; 1. recursive query (extent calls itself)
;; 2. disjunction (different extent bodies are ORed)
;; 3. component attributes (e.g. your arm is a component, your brother isn't)
#console {
height: 820px;
background: #eee;
margin: 10px;
border-radius: 5px;
-moz-border-radius: 5px;
border: 1px solid #aaa;
}
#console div.jquery-console-inner {
@terjesb
terjesb / gist:2967733
Created June 21, 2012 18:50 — forked from stuarthalloway/gist:1980351
frinj unit conversion running inside a Datomic datalog query
;; lein settings
(defproject foo "1.0.0-SNAPSHOT"
:description "Test App"
:dependencies [[com.datomic/datomic "0.1.2678"]
[frinj "0.1.2" :exclusions [org.clojure/clojure]]])
;; load libs
(use 'frinj.core 'frinj.calc)
(frinj-init!)
(use '[datomic.api :only (q db) :as d])
(use '[datomic.api :only [db q] :as d])
;; DB setup
(def schema
[{:db/id #db/id[:db.part/db]
:db/ident :site/url
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db.install/_attribute :db.part/db}
@terjesb
terjesb / gist:2972301
Created June 22, 2012 11:53 — forked from stuarthalloway/gist:2559635
Using data functions on both peer and transactor side
;; this code valid as of build 3084
;; in-memory example database
(use '[datomic.api :only (db q) :as d])
(def uri "datomic:mem://test")
(d/create-database uri)
(def conn (d/connect uri))
;; example schema
(d/transact conn [{:db.install/_attribute :db.part/db,
@terjesb
terjesb / add-attr.clj
Created July 1, 2012 13:37 — forked from ulsa/add-attr.clj
Find Out Who Changed What with Datomic, 2
user=> @(d/transact conn
[{:db/id #db/id[:db.part/db]
:db/ident :audit/user
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/index true
:db.install/_attribute :db.part/db}])
@terjesb
terjesb / gist:3028485
Created July 1, 2012 13:53 — forked from stuarthalloway/gist:3026504
Groovy Datomic Comic Example
;; groovy-datomic example (https://github.com/jeffbrown/groovy-datomic) in Clojure
(use '[datomic.api :only (q db) :as d])
(def uri "datomic:mem://comics")
(d/create-database uri)
(def conn (d/connect uri))
(d/transact
conn
[{:db/id #db/id[:db.part/db]
:db/ident :issue/comic
(use '[datomic.api :only [db q] :as d])
(def schema
[{:db/doc "A persons name"
:db/id #db/id[:db.part/db]
:db/ident :name
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db.install/_attribute :db.part/db}