1 つの関数と 1 つのマクロ
;; 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 が破壊的であると見なされるかどうかについてもわかりませんが、最初に場所のサポートを削除することで物事を単純にしたかったのです。