conjo

added

ns
clojure.core.logic

type
function

(conjo coll & args)

A constraint version of conj

                (use 'clojure.core.logic)

;; Like conj, but result is the last argument

(run* [q] (conjo [1 2 3] 4 q))
;;=> ([1 2 3 4])
(run* [q] (conjo [1 2 3] 4 5 6 q))
;;=> ([1 2 3 4 5 6])
(run* [q] (conjo {:a 0} {:a 123 :b 345} q))
;;=> ({:a 123, :b 345})

;; Partially relational:
(run* [q] (conjo [1 2] q [1 2 3]))
;;=> (3)

;; but the same doesn't work for maps
(run* [q] (conjo {} q {:a 1}))
;; java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.core.logic.LVar

;; This case works:
(run* [q] (conjo {} {:a q} {:a 12345}))
;;=> (12345)