                            (fn [r] (not= (r 1) (r 2))))
     :else                (constantly true)))
 
-(defn param-query
+(defn add-param-query!
   [g id [s p o]]
   (let [vs?        (qvar? s), vp? (qvar? p), vo? (qvar? o)
         vmap       (bind-translator vs? vp? vo? s p o)

(defn score-collect-join
  [vertex] (if (== (count (::f/signal-map @(:state vertex))) 2) 1 0))

(defn add-join
  [g qa qb]
  (let [jv (f/add-vertex!
            g {:val (delay nil)

        num-projects (add-counter! g projects)
        num-types (add-counter! g types)
        inf1 (add-rule! g :knows [nil 'knows nil] (fn [[s p o]] [[s 'type 'person] [o 'type 'person] [o 'knows s]]))
        pq (:qvar-result (add-param-query! g :pq '[?s knows ?o]))
        jq (:qvar-result (add-join-query! g '[[?p author ?prj] [?prj type project] [?p type person]]))
        ctx (f/async-context {:graph g :processor f/eager-vertex-processor :timeout nil})]
    (f/execute! ctx)
    (mapv
