 ;   :transaction
 ;     (consume :integer :as :int1)
 ;     (count-of :float :as :how-many)
-;     ????? this one's not so obvious yet
-;     (remember :float :at (mod int1 ) :as :float1)
-;     (place :float float1)]
+;     (calculate [:how-many :int1] #(mod %1 %2) :as :which)
+;     (remember :float :at :which :as :float1)
+;     (place :float (recall :float1))]
 ;     )
 
 

; - `remember-stack [stackname :as local]`
;    save the entire stack to the `local`
;    raise an Exception if it's undefined
; - `place [stackname item]`
;    push the item to the named stack
;    raise an Exception if it's undefined
; - `replace-stack [stackname new-stack]`
;    replace the indicated stack with a new list
;    raise an exception if it's undefined
; - `calculate [fn :as local]
;    save the result of `fn` under key `local`

;; And I THINK that supports all defined Push instructions I've ever seen....


(fact "clear-locals also does what it's supposed to do"
  (let [foo (store-local (make-interpreter) :foo 8)]
    (:locals (clear-locals foo)) => nil))


(defn recall
  [interpreter k]
  (get-in interpreter [:locals k]))


(fact "recall retrieves a named item from :locals of its interpreter"
  (let [foo (store-local (make-interpreter) :foo 8)]
  (recall foo :foo) => 8))

;;


(defn consume
