Code Aquarium

minazoko's blog -*- 水底のブログ -*-

Emacs Lisp で as-> マクロ

Clojure1.5のas->マクロをelispで。

(defmacro as-> (expr name &rest forms)
  `(let* ((,name ,expr)
          ,@(mapcar '(lambda (f) `(,name ,f)) forms))
     ,name))

本家Clojureの実装はこんな感じ

(defmacro as-> [expr name & forms]
  `(let [~name ~expr
               ~@(interleave (repeat name) forms)]
     ~name))

このケースだと、interleveよりもmapcar(map)の方が分かり安い気がするー。