我正在使用clisp,我想知道是否可以使用nthcdr的可设置版本的任何库。
最佳答案
您可以使用以下方法来解决:
(let ((lst (list 1 2 3 4))
(n 2))
(setf (cdr (nthcdr (1- n) lst)) '(5 6 7))
l)
> (1 2 5 6 7)
或为其定义自己的setf:
;; !!warning!! only an example, lots of nasty edge cases
(defsetf nthcdr (n lst) (new-val)
`(setf (cdr (nthcdr (1- ,n) ,lst)) ,new-val))
我不知道为什么nthcdr没有定义setf。甚至Alexandria似乎都为last定义了setf,但没有为nthcdr定义。
PS。我想将setf nthcdr当作难闻的气味在您的代码中。