我想在循环中使用格式化输出来生成字符串.手册说它可以通过给format函数一个带填充指针作为目标的字符串来轻松完成.不幸的是,手册中如何初始化此字符串并不透明.
我试着(string "")和(format nil "")没有运气.
(make-array 0 :element-type 'character :fill-pointer 0) 对我有用,但感觉不对劲.
使用填充指针初始化字符串的正确方法是什么?
如果我有这个结构:
(defstruct foo
(x 0 :type 'fixnum))
Run Code Online (Sandbox Code Playgroud)
而这个数组:
(defvar arr (make-array 0 :element-type 'foo :adjustable t :fill-pointer 0))
Run Code Online (Sandbox Code Playgroud)
然后执行以下操作:
(vector-push-extend (make-foo) arr)
(setf (fill-pointer arr) 0)
Run Code Online (Sandbox Code Playgroud)
是foo在阵列中现在GC的候选人?
我从CLHS了解到它不活跃,但我不确定该状态的含义.
我有两个带有填充指针的向量。我需要merge这些向量,因此需要一个仍然具有填充指针的新向量。
(defparameter *a* (make-array 3 :fill-pointer 3
:initial-contents '(1 3 5)))
(defparameter *b* (make-array 3 :fill-pointer 3
:initial-contents '(0 2 4)))
(type-of *a*)
;;=> (VECTOR T 6)
;; Pushing new elements works as intended.
(vector-push-extend 7 *a*)
(vector-push-extend 6 *b*)
;; Now we create a new vector by merging *a* and *b*.
(defparameter *c* (merge 'vector *a* *b* #'<))
;;=> #(0 1 2 3 4 5 6 7)
(type-of *c*)
;;=> (SIMPLE-VECTOR 8)
;; The type of this …Run Code Online (Sandbox Code Playgroud)