如何 apply 一个宏?

  • apply 应该打上引号 :sweat_smile:

  • elisp 怎样迭代调用一系列相似的函数? 这个问题,我想用试试用宏展开它,递归的时候没脑袋没转过弯,backquote 其实就是 “apply” 的意思吧,然后也没想到 cdr 接着使用 @

    (defmacro recall-rest (arg fn &rest fn-rest)
      (if fn
          `(funcall ',fn (recall-rest ,arg ,(car fn-rest) ,@(cdr fn-rest)))
        `,arg))
    
    (macroexpand-all '(recall-rest arg fun1 fun2 fun3))
    ;; =>
    ;; (funcall (quote fun1)
    ;;          (funcall (quote fun2)
    ;;                   (funcall (quote fun3)
    ;;                            arg)))