   with `delay-goal`, so you don't need to worry about adding them yourself.
 
   (This does have a performance cost, but speed is not the point of this port)"
-  ([g] `(delay-goal ~g))
-  ([g & gs] `(ldisj (delay-goal ~g) (ldisj+ ~@gs))))
+  ([goal] `(delay-goal ~goal))
+  ([goal & goals] `(ldisj (delay-goal ~goal) (ldisj+ ~@goals))))
 
 (defmacro lconj+
   "Like `ldisj+`, but for `lconj`."
-  ([g] `(delay-goal ~g))
-  ([g & gs] `(lconj (delay-goal ~g) (lconj+ ~@gs))))
+  ([goal] `(delay-goal ~goal))
+  ([goal & goals] `(lconj (delay-goal ~goal) (lconj+ ~@goals))))
 
 
 

;; `mapcat-stream` to `mapcat`.
(deftype StreamNode [head next]
  IStream
  (merge-streams [$1 $2] (StreamNode. head
                                      (merge-streams next $2)))
  (mapcat-stream [$ g] (merge-streams (g head)
                                      (mapcat-stream next g)))
  (realize-stream-head [$] $))

;; ### Immature streams (IFn)
;;

                   (fresh [~@(rest var-vec)]
                     ~@clauses)))))

(defn call-empty-state [goal]
  (goal empty-state))

(defmacro run* [fresh-var-vec & goals]
  `(->> (fresh [~@fresh-var-vec] ~@goals)
     call-empty-state
     stream-to-seq
     (map reify-state-first-var)))

(defmacro run [n fresh-var-vec & goals]
  `(take ~n (run* ~fresh-var-vec ~@goals)))
