τϥϯεσϡʔαͷྃॲཧ͍ͭݺΕΔͷ͔ʁ
(defn add [x y]
(pm/save :add (comp (map (fn [x] (prn [:pre x]) x))
(xf/take-last 3)
(map (fn [x] (prn [:post x]) x))))
(+ x y))
(redue add 0 (range 5))
;; [:pre {:x 0, :y 0}]
;; [:pre {:x 0, :y 1}]
;; [:pre {:x 1, :y 2}]
;; [:pre {:x 3, :y 3}]
;; [:pre {:x 6, :y 4}]
;=> 10
(pm/logs)
;; [:post {:x 1, :y 2}]
;; [:post {:x 3, :y 3}]
;; [:post {:x 6, :y 4}]
;=> {:add [{:x 1, :y 2} {:x 3, :y 3} {:x 6, :y 4}]}
(pm/logs)
;=> {:add [{:x 1, :y 2} {:x 3, :y 3} {:x 6, :y 4}]}