我试图使用delete
Common Lisp (SBCL) 中的函数从数组中删除一个元素,但注意到在调用以下命令后,该数组的所有索引仍然存在((length arr)
数组上的返回值不变)delete
:
(defparameter *x* (make-array 3 :initial-contents (list 13 26 39)))
*x* ; #(13 26 39)
(delete 26 *x* :test #'equal) ; #(13 39)
*x* ; #(13 39 39)
(length *x*) ; 3
Run Code Online (Sandbox Code Playgroud)
我假设*X*
调用后仍然可以访问 的第二个元素delete
,因为数组是连续的内存块,其中索引无法在不创建新数组的情况下“删除”。
我的困惑来自于setf
与 的结合使用delete
。这仅允许用户访问不受以下影响的元素delete
:
(defparameter *y* (make-array 3 :initial-contents (list 13 26 39)))
*y* ; #(13 26 39)
(setf *y* (delete 26 *y* :test #'equal)) ; #(13 39) …
Run Code Online (Sandbox Code Playgroud)