你可以通过以下方式破解它:
(let ((lst (list 1 2 3 4))
(n 2))
(setf (cdr (nthcdr (1- n) lst)) '(5 6 7))
l)
> (1 2 5 6 7)
Run Code Online (Sandbox Code Playgroud)
或者为它定义自己的setf:
;; !!warning!! only an example, lots of nasty edge cases
(defsetf nthcdr (n lst) (new-val)
`(setf (cdr (nthcdr (1- ,n) ,lst)) ,new-val))
Run Code Online (Sandbox Code Playgroud)
我不知道为什么nthcdr没有定义setf.甚至亚历山大似乎也为最后一个定义了setf,但不是nthcdr.
PS.我想把你的nthcdr设置为代码中的难闻气味.