小编Con*_*zer的帖子

删除函数对数组有什么作用?

我试图使用deleteCommon 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)

sbcl common-lisp

5
推荐指数
1
解决办法
116
查看次数

标签 统计

common-lisp ×1

sbcl ×1