CL 求解: 反译 macro

我想试试写个defun宏以尝试理解,有点疑问(当然先谷歌了):

(defvar a ‘apple)
``(,,a)  => `(,apple)

有没有办法得到

`(apple)

还是说这没有意义? 因为``说明了在两层了,在第一层获取值没有意义?
我能不能把这些用到这些宏符号的表达式反过来转化为比较”死板“的普通表达式?
(可能是我没想到合适的关键字,谷歌没找到) 例如:

’a => (quote a)  
`(a b ,c) => (list (quote a) (quote b) c)

另外一个疑问是,理论上 macro 是在前面运行的,那为什么不能:

(defun plus (a b) (+ a b))
(defmacro test () ''plus) 
((test) 5 6)  ;;Error

而只能:

(eval `(,(test) 5 6))

理论上

((test) 5 6)

应该在编译前就变成了:

(plus 5 6)

我估计是一种约定?不同的方言可能不一样 ?

例如参考 Scheme 的 JavaScript 可以 fn()()()() 这种形式( Ramda.js 默认他的所有函数都是这样curry),估计 Scheme 也可以,而Common Lisp 觉得这样没必要。。。
但我觉得有的话更简便?就像 JS6 有了 fn(…x) 语法后不用再用 fn.apply(nil, x) 了