;; Clojure has no in/out parameters: a function returns
;; the new values, and the caller binds them itself
(defn swap-strings [s1 s2]
[s2 s1])
(def a "A")
(def b "B")
(let [[a b] (swap-strings a b)]
;; a is "B", b is "A"
(println "inside: a is" a "b is" b))
;; the outer names never moved
(println "outside: a is" a "b is" b)