`(defun bar(y) \
(funcall ,change-fn ,x y)))
當調用(foo 1 :change-fn #'list )時沒有問題因爲宏擴展爲: (DEFUN BAR (Y) (FUNCALL #'LIST 1 Y))
而當調用(foo 1)時就會報錯 此時宏擴展爲: (DEFUN BAR (Y) (FUNCALL #<FUNCTION LIST> 1 Y))
;;;;;;;;;;;;;;;;;;;;;;;
正確的寫法爲
(defmacro foo(x &key(change-fn 'list))
`(defun bar(y)
(funcall (function ,change-fn) ,x y)))
此時調用有兩種辦法1:(foo 1 :change-fn list)
2: (foo 1 :change-fn (lambda(x y) (list x y))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
不知道自己總結得是否正確 希望有人指點下