On Jan 15, 2009, at 7:28 AM, HB wrote:

Do *1 *2 *3 ... are saved in a built in sequence that we can inspect its contents?

No, they are separate vars. Here's the code from the core of the read- eval-print loop in clojure/src/clj/clojure/main.clj that shows how they're updated:

             (let [input (read)]
               (skip-if-eol *in*)
               (let [value (eval input)]
                 (print value)
                 (set! *3 *2)
                 (set! *2 *1)
                 (set! *1 value)))

As a group, *1, *2, and *3 form (effectively) a small queue (not a stack as someone mentioned previously). If at any point, you want to see all three together, you can evaluate an expression that puts them all in a vector:

        Clojure
        user=> :a
        :a
        user=> :b
        :b
        user=> :c
        :c
        user=> :d
        :d
        user=> [*1 *2 *3]
        [:d :c :b]

Note that evaluating the vector makes that the new "most recent value": it causes a new "*1" to be pushed into the queue:

        user=> [*1 *2 *3]
        [[:d :c :b] :d :c]
        user=>

--Steve

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to