是否存在可设置的nthcdr实现?

Par*_*ife 7 lisp clisp common-lisp

我正在使用clisp,我想知道是否有任何我可以使用的具有可设置版本的nthcdr的库.

Bee*_*eef 5

你可以通过以下方式破解它:

(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设置为代码中的难闻气味.