Skip to content

Instantly share code, notes, and snippets.

View WilliamParker's full-sized avatar

William Parker WilliamParker

  • London, United Kingdom
View GitHub Profile
@WilliamParker
WilliamParker / gist:8b8b073ab86bf6710a8c
Created December 7, 2015 20:06
Clara example of rules with duplicate RHS except for reader tags
(ns clara.examples.dup-nodes
(:refer-clojure :exclude [==])
(:require [clara.rules.accumulators :as acc]
[clara.rules :refer :all]
[potemkin :as p]))
(p/defrecord+ BindingFact [])
(p/defrecord+ InsertionFact[b])
@WilliamParker
WilliamParker / gist:d8ef4c0555a30135f35a
Created December 28, 2015 16:27
load method from unmap-test example
0 getstatic #10 <unmap_test/core__init.const__0>
3 invokevirtual #16 <clojure/lang/Var.getRawRoot>
6 checkcast #18 <clojure/lang/IFn>
9 getstatic #22 <unmap_test/core__init.const__1>
12 invokeinterface #26 <clojure/lang/IFn.invoke> count 2
17 new #28 <unmap_test/core$loading__5340__auto____965>
20 dup
21 invokespecial #31 <unmap_test/core$loading__5340__auto____965.<init>>
24 checkcast #18 <clojure/lang/IFn>
27 invokeinterface #33 <clojure/lang/IFn.invoke> count 1
@WilliamParker
WilliamParker / gist:dc606ad086670915efd9
Created December 28, 2015 16:28
Bytecode for the init0 method of unmap-test.core
0 ldc #104 <clojure.core>
2 ldc #106 <in-ns>
4 invokestatic #112 <clojure/lang/RT.var>
7 checkcast #12 <clojure/lang/Var>
10 putstatic #10 <unmap_test/core__init.const__0>
13 aconst_null
14 ldc #114 <unmap-test.core>
16 invokestatic #118 <clojure/lang/Symbol.intern>
19 checkcast #120 <clojure/lang/AFn>
22 putstatic #22 <unmap_test/core__init.const__1>
@WilliamParker
WilliamParker / init.java
Created December 28, 2015 16:31
Decompiled namespace class initializer for unmap-test.core
package unmap_test;
import clojure.lang.AFn;
import clojure.lang.Compiler;
import clojure.lang.IFn;
import clojure.lang.IPersistentMap;
import clojure.lang.Keyword;
import clojure.lang.LockingTransaction;
import clojure.lang.RT;
import clojure.lang.Symbol;
@WilliamParker
WilliamParker / gist:b109dba95f36187f54d0
Created January 12, 2016 21:42
Test namespace for duplicate rules in clara-rules
(ns clara.examples.duplicates
(:require [clara.rules.accumulators :as acc]
[clara.rules :refer :all]
[clara.rules.compiler :as c]))
(defrecord Temperature [t])
(defrecord Cold [t])
(defrule is-cold?
@WilliamParker
WilliamParker / perf_test.clj
Created February 10, 2016 16:35
Clojure vec vs list pop performance test
;; Determine the relative performance of turning a vector into a list
;; and popping items off the list versus just using the vector.
;; The list approach is asymptotically faster, but the idea is to determine
;; at what point the overhead of creating a new list is worth it.
(defn time-list [n]
(let [init-vec (mapv (constantly 1)
(range n))]
(time (loop [l (into () init-vec)]
(let [r (rest l)
@WilliamParker
WilliamParker / example.clj
Created April 15, 2016 02:46
Example demonstrating use of clojure.lang.Keyword as the fact type in Clara rule constraints
clara.test-rules> (defrule arule [clojure.lang.Keyword (= :a)] => (println "I fired"))
#'clara.test-rules/arule
clara.test-rules> (-> (mk-session [arule]) (insert :a) (fire-rules))
I fired
#object[clara.rules.engine.LocalSession 0x2c848a4e "clara.rules.engine.LocalSession@2c848a4e"]
clara.test-rules> (-> (mk-session [arule]) (insert :b) (fire-rules))
I fired
#object[clara.rules.engine.LocalSession 0x107e6fae "clara.rules.engine.LocalSession@107e6fae"]
clara.test-rules> (defrule arule2 [clojure.lang.Keyword (= this :a)] => (println "I fired"))
#'clara.test-rules/arule2
@WilliamParker
WilliamParker / IBenchmark.java
Created April 22, 2016 20:24
See clara-rules issue 182
package clara.benchmark;
import java.util.Iterator;
/**
* Benchmark interface.
*/
public interface IBenchmark<T, E> {
/**
(defn constant-accum [v]
(accumulate
:initial-value v
:reduce-fn (constantly v)
:combine-fn (constantly v)
:retract-fn (constantly v)
:convert-return-fn identity))
(deftest nil-accumulate-node-test
(let [r1 (dsl/parse-rule [[?r <- (constant-accum nil) :from [Cold]]]
@WilliamParker
WilliamParker / repl_session.clj
Created July 8, 2016 14:13
Demo of session immutatibility in clara-rules
clara.test-rules> (com/clear-session-cache!)
{}
clara.test-rules> (defrule first->second-rule
[First]
=>
(insert! (->Second)))
#'clara.test-rules/first->second-rule
clara.test-rules> (defquery second-query
[]
[Second])