配列(vector)に対してマクロ実行を指定したmapが期待通りに動かない
clojure初心者です。よろしくお願いします。
話を簡単にするため、以下のマクロを試に作ってみたとします。
(defmacro aiueo [abc] (list 'defn (symbol abc) [] (list 'str "aiueo-------")))
これで
(aiueo "hoge")
とすると
hoge
という関数が動的に生成されます。
(hoge "xyz")
;; -> "aiueo-------xyz"
この調子で、関数名だけを変えて動的に関数を作ろうと試してみました。
(map #(aiueo %) ["abc" "def" "ghi"])
;; -> (#'user/p1__97# #'user/p1__97# #'user/p1__97#)
このあと、期待通りであれば
(abc "aaa")
;; -> "aiueo-------aaa"
となるはずなのですが、実際には
(abc "aaa")
;; -> CompilerException java.lang.RuntimeException: Unable to resolve symbol: abc in this context, compiling:(NO_SOURCE_PATH:57:1)
となってしまいました。
clojureを学んで3日目、マクロは今日初めて見たばかりなので当然自分が何かを間違っていると考えていますが、数時間考えても理由が分かりません。
御存知の方ご教示お願いします。
動作環境は
clojure: 1.8.0
OS: Windows7
です。