blove
1
想用 macro 写一个模版,希望实现的功能是:
对已经存在的变量 line-thr 根据判断改变其值。
如果把 if 判断加进去,好像是需要 backquote ?但我对 backquote 真的是很犯晕
所以想请问 ~ 以下代码要如何加 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 个赞
blove
3
感谢大佬速度解答!
学习了大佬给出的例子,改写了自己的代码,现在已经实现了希望的功能!!!
(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 个赞
blove
5
收到!谢谢!我就感觉我自己写的那个有点别扭!是我看猫大的例子还不够仔细,没转过弯来!这下明白啦!非常感谢!