运算符重载

;; ^ is not an operator in Clojure at all - it is metadata syntax,
;; and bit-xor is a normal function. So an "extra operator" for
;; your own type is, once again, just another named function.
(defrecord Point [x y])

(defn p-pow [p n]
  (->Point (long (Math/pow (:x p) n))
           (long (Math/pow (:y p) n))))

(def p1 (p-pow (->Point 2 33))
;; p1 is 8, 27
(def p2 (p-pow (->Point 2 32))
;; p2 is 4, 9

(println "p1 is" (:x p1) (:y p1))
(println "p2 is" (:x p2) (:y p2))