Ignoring native interop and transients, is it possible to create any data structures in Clojure that contain direct circular references ?
It would seem that immutable da
In Clojure most circular data structures will explicitely go through a ref type of some kind (eg atom).
However you can create a circular sequence (it's somewhat an oxymoron):
(let [a (atom nil)] (reset! a (lazy-seq (cons 1 @a))))
And since Clojure 1.2 with deftype you can create other datatypes which can introduce circularity without using explicitely (from the usercode at least) any kind of ref type.
You can create a circular reference very easily by putting some form of reference inside a data structure, then updating the reference to point back to the overall structure.
A trivial example:
(def a [(atom nil)])
(reset! (first a) a)
This will create a list with one element, which is an atom that points back at the list.