标签: fill-pointer

如何在Common Lisp中使用填充指针初始化字符串?

我想在循环中使用格式化输出来生成字符串.手册说它可以通过给format函数一个带填充指针作为目标的字符串来轻松完成.不幸的是,手册中如何初始化此字符串并不透明.

我试着(string "")(format nil "")没有运气.

(make-array 0 :element-type 'character :fill-pointer 0) 对我有用,但感觉不对劲.

使用填充指针初始化字符串的正确方法是什么?

string format common-lisp fill-pointer adjustable-array

5
推荐指数
3
解决办法
863
查看次数

填充指针是否会影响GC?

如果我有这个结构:

(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了解到它不活跃,但我不确定该状态的含义.

arrays common-lisp fill-pointer

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

将两个向量与填充指针合并到结果向量中

我有两个带有填充指针的向量。我需要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)

merge vector common-lisp fill-pointer

3
推荐指数
1
解决办法
82
查看次数