リーダーマクロ

色々感想書く前に、忘れないうちに酒のネタ。
全世界でのべ100万回くらい書かれてそう。

(asdf:oos 'asdf:load-op :cl-ppcre)

(set-macro-character #\{
  #'(lambda (s c)
      (let ((args (cl-ppcre:split " " (string-upcase (symbol-name (read s)))))
	    (body (read-delimited-list #\} s t)))
	`(lambda ,(mapcar #'(lambda (sym) (intern sym)) args)
          ,@body))))

({|a b|(+ (* a a) (* b b))} 2 4)
;=> 20

関連:最高にキモい Lisp コードを書いてみよう with 100 行リーダーマクロ

以前xyzzyのscratchでちょこっとmapcとか使いたい時にタイプ量減らせて良いかなと思ってやってみたけど微妙だった。
引き数のリストを前に持ってくれば、と思ったけどやってみたらどうしようもなく気持ちわるかった。