你如何以编程方式在clojure中创建多个编译时defs?

Gab*_* Mc 4 clojure

我想在编译时在文件中创建多个def,而不必输入所有内容.我想做点什么:

(ns itervals)

(loop [i 0]
   (if (<= i 128)
       (do 
         (def (symbol (str "i" i)) i)
         (recur (+ i 1)))))
Run Code Online (Sandbox Code Playgroud)

这样,我们在当前上下文中定义变量i1,...,i128.我无法想出在编译时这样做的方法,而没有明确地定义它们.我认为宏可能是要走的路,但我不知道如何.

Joh*_*den 7

这感觉更像编译时间:

(defmacro multidef[n]   
    `(do ~@(for [i (range n)]
           `(def ~(symbol (str "i" i)) ~i))))

(multidef 128)

i0   ; 0 
i127 ; 127 
i128 ; unable to resolve
Run Code Online (Sandbox Code Playgroud)

但是我想不出能够分辨出差异的测试,所以也许这种区别是错误的.