在Common Lisp中将字符附加到字符串

7 lisp string character common-lisp

我有一个字符ch,我想附加到字符串str.我意识到你可以连接像这样的字符串:

(setf str (concatenate 'string str (list ch)))
Run Code Online (Sandbox Code Playgroud)

但这似乎效率很低.是否有更快的方法来追加单个字符?

Rai*_*wig 11

如果字符串有填充指针,也可以调整.

Adjustable =可以改变它的大小.

fill-pointer =内容大小,长度,可以小于字符串大小.

VECTOR-PUSH =在末尾添加一个元素并递增填充指针.

VECTOR-PUSH-EXTEND= as VECTOR-PUSH,另外调整数组大小,如果它太小.

我们可以用正常的字符串制作一个可调节的字符串

CL-USER 32 > (defun make-adjustable-string (s)
               (make-array (length s)
                           :fill-pointer (length s)
                           :adjustable t
                           :initial-contents s
                           :element-type (array-element-type s)))
MAKE-ADJUSTABLE-STRING

CL-USER 33 > (let ((s (make-adjustable-string "Lisp")))
               (vector-push-extend #\! s)
               s)
"Lisp!"
Run Code Online (Sandbox Code Playgroud)


Sva*_*nte 7

如果要多次扩展单个字符串,使用with-output-to-string,写入它提供的流通常非常有效.请务必使用write或princ等(而不是格式)来提高性能.