A persistent vector differs from an ordinary vector (Vectors) in that it is immutable, and all operations yield new persistent vectors instead of modifying inputs. Unlike immutable operations on ordinary sequences, persistent vector operations are efficient and run in sub-linear time.
The empty persistent vector, written PV{ }, is used for building up all other persistent vectors.
This implementation of persistent vectors is based on the clojure.lang.PersistentVector class from Rich Hickey's Clojure language for the JVM (http://clojure.org).