请问关于 defmacro 、 backquote 的正确写法 🤪

想用 macro 写一个模版,希望实现的功能是:
对已经存在的变量 line-thr 根据判断改变其值。
如果把 if 判断加进去,好像是需要 backquote ?但我对 backquote 真的是很犯晕 :joy: :crazy_face:
所以想请问 ~ 以下代码要如何加 backquote ?

(setq line-thr 5)
(defmacro add-value-temp (var min max thr)
  (if (< var max)
	  (list 'setq var (list '+ var thr))
	(list 'setq var min)
	)
  )

(add-value-temp line-thr 5 30 5)

在最外面的括号用 ` , 然后里面变量引用用 ,var, 如果要实现代码包裹就用 ,@body

看我上面的例子吧。

1 个赞

感谢大佬速度解答! :+1:
学习了大佬给出的例子,改写了自己的代码,现在已经实现了希望的功能!!!

(setq line-thr 5)
(defmacro add-value-temp (var min max thr)
  `(if (< ,var ,max)
	  ,(list 'setq var (list '+ var thr))
	,(list 'setq var min)
	)
  )
;; (macroexpand (add-value-temp line-thr 5 30 5))
(add-value-temp line-thr 5 30 5)
1 个赞

应该这么写

(setq line-thr 5)
(defmacro add-value-temp (var min max thr)
  `(if (< ,var ,max)
	  (setq ,var (+ ,var ,thr))
	(setq ,var ,min)))
;; (macroexpand (add-value-temp line-thr 5 30 5))
(add-value-temp line-thr 5 30 5)
1 个赞

收到!谢谢!:pray:t2:我就感觉我自己写的那个有点别扭!:joy:是我看猫大的例子还不够仔细,没转过弯来!这下明白啦!非常感谢!