一功能一宏
;; I am sorry for the confusing function name.
;; As one answer suggests, cons-if-not-member is the better name.
(defun cons-if-member (element list)
(if (member element list)
list
(cons element list)))
(defmacro pushnew-no-bells (element list)
"pushnew without place support"
`(setq ,list (cons-if-member ,element ,list)))
(let ((xx (list 1 2)))
(pushnew-no-bells 0 xx)
xx)
我不知道以下哪个是正确的:
cons-if-member 是一个非破坏性函数,而 pushnew-no-bells 是一个破坏性宏。
两者都是非破坏性的。
cons-if-member 是一个非破坏性函数,形容词“破坏性”和“非破坏性”不适用于宏。
以上都不是
我也不知道 pushnew 是否被认为是破坏性的,但我想通过首先放弃地方支持来简化事情。