我正在使用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当作难闻的气味在您的代码中。

10-01 11:37