すでにいろいろなところで書かれているネタな気はしますが、書いてみました。
->はexpを次の式の第一引数の位置に挿入し、 ->>はexpを次の式の最後の引数の位置に挿入します。
(defmacro -> (exp &rest rest)
(if rest
(let ((fst (car rest))
(rest (cdr rest)))
(typecase fst
(symbol `(-> (,fst ,exp) ,@rest))
(atom `(-> (,fst ,exp) ,@rest))
(list `(-> (,(car fst) ,exp ,@(cdr fst)) ,@rest))))
exp))
(defmacro ->> (exp &rest rest)
(if rest
(let ((fst (car rest))
(rest (cdr rest)))
(typecase fst
(symbol `(->> (,fst ,exp) ,@rest))
(atom `(->> (,fst ,exp) ,@rest))
(list `(->> (,(car fst) ,@(cdr fst) ,exp) ,@rest))))
exp))
0 件のコメント:
コメントを投稿