[Common Lisp] lambda と書くのがめんどうなときに。ちょっと考えなおした。
#_(* 2 _a)
より (_ * 2 _a)
でいいか。(_ (declare (optimize (speed 3))) (_ * 2 _a))
こっちは自然だな。いっそのこと [* 2 _a]
とも思う(Arc!)が () に [] がまざるのに強烈な違和感を感じる(慣れるかな?)。(_ * 2 _)
これでもいける。
(defmacro _ (&rest body)
(let ((syms
(sort
(remove-duplicates
(remove-if-not (lambda (x)
(and (symbolp x)
(head-p (symbol-name x) "_")))
(flatten body)))
#'string<=
:key #'symbol-name)))
(let ((rest (find '_rest syms :key #'symbol-name :test #'string=)))
(when rest
(setq syms (append (remove rest syms) `(&rest ,rest)))))
(if (consp (car body))
`(lambda ,syms
,@body)
`(lambda ,syms
,body))))
0 件のコメント:
コメントを投稿