defun
create in a lisp マクロの let バインディングを条件付きで削除するにはどうすればよいですか? ここで、結果の関数から最初の let バインド変数を削除したいのですがnil
、let バインドに固執してエラーが発生するという問題が発生しています。
たとえば、結果の関数はlet
orlet*
を使用し、 に応じて最初の変数割り当てを削除する必要がありますarg
。しかし、私が問題を書いた方法は、に置き換えることから来てvar1
いnil
ます。nil を取り除く方法がわかりません。
(cl-defmacro mac (cmd &optional arg)
(let ((fn (intern (concat "fn-" cmd))))
`(defun ,fn ()
(interactive)
(,(if arg 'let* 'let)
(cons
,(when arg
'(var1 1))
(var2 (if (bound-and-true-p var1) (+ var1 1) 1)))
(message "%s" var2)))))
(mac "fun") ; Attempt to set constant: nil
(mac "fun2" t) ; no problem
;; (symbol-function 'fn-fun)
;; (symbol-function 'fn-fun2)
;; (fn-fun)
;; (fn-fun2)