title: What advantage are Clojure's 1.4 reader literals, and why won't sample compile?
body: <p>I have two questions. First, what do I need to do to get the following code to compile, and what are the Clojure 1.4 reader literals giving me that I cannot get from macros?</p>
  <p>I understand I am overwriting the reader with the local data_readers.clj file, but where can I read further about these reader literals in more detail than in the Clojure 1.4 release notes, which I've already visited?</p>
  <p>Here is the code being compiled with error.</p>
  <pre><code>java.lang.RuntimeException: No reader function for tag ?=, 
  </code></pre>
  <h2>project.clj</h2>
  <pre><code>(defproject repl-test &quot;0.0.1-SNAPSHOT&quot;
    :description &quot;TODO: add summary of your project&quot;
    :dependencies [[org.clojure/clojure &quot;1.4.0&quot;]
                   [org.clojure/clojure-contrib &quot;1.2.0&quot;]
                   [clojure-csv/clojure-csv &quot;1.3.2&quot;]
                   [org.clojure/tools.cli &quot;0.1.0&quot;]
                   [util &quot;1.0.2-SNAPSHOT&quot;]
                   [clj-http &quot;0.1.3&quot;]]
     :aot [repl-test.core]
     :main repl-test.core)
  </code></pre>
  <h2>data_readers.clj (located at the top of my lein project repl-test)</h2>
  <pre><code>{
   ?= repl-test.core/debug-print
   str repl-test.core/expand-sexp
  }
  </code></pre>
  <p>Should data_readers.clj go somewhere else? If so, where?</p>
  <h2>Pertinent parts of core.clj</h2>
  <pre><code>(ns repl-test.core
    (:gen-class)
    (:require [clojure.string :as str])
    (:require [util.core :as utl])
    (:use clojure-csv.core))
  
  (defn debug-print
    &quot;Gauche debug print&quot;
    [x]
    `(let [res# ~x]
       (println &quot;?=&quot; res#)
       res#))
  
  (defn expand-sexp
    &quot;Expand S-exp in string&quot;
    [s]
    (let [ls (map-indexed #(if (even? %) %2 (read-string %2))
                          (str/split s #&quot;`&quot;))]
      `(apply str (list ~@ls))))
  
  (defn -main 
    [&amp; args]
    (println (map inc #?=(range 10)))
   
    (let [i 100]
      (println #str&quot;i = `i`&quot;)
      (println #str&quot;(+ 1 2 3) = `(+ 1 2 3)`&quot;)))
  </code></pre>
  <p>The example code came from <a href="https://gist.github.com/2399254" rel="nofollow noreferrer">here</a>.</p>
  <p>Thanks.</p>