私は文字列str
に追加したい文字ch
を持っています。Common Lispの文字列に文字を追加する
(setf str (concatenate 'string str (list ch)))
しかし、これはかなり効率が悪いようです。単一の文字を追加するより速い方法がありますか?
私は文字列str
に追加したい文字ch
を持っています。Common Lispの文字列に文字を追加する
(setf str (concatenate 'string str (list ch)))
しかし、これはかなり効率が悪いようです。単一の文字を追加するより速い方法がありますか?
文字列に塗りつぶしポインタがあり、調整可能な場合もあります。
調整可能=そのサイズを変更できます。
fill-pointer =コンテンツのサイズ(長さ)は、文字列サイズより小さくすることができます。
VECTOR-PUSH
=末尾に要素を追加し、塗りつぶしポインタを増やします。
VECTOR-PUSH-EXTEND
= 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!"
あなたは、単一の文字列を複数回延長したい場合は、それは多くの場合で、出力 - 文字列、書き込みを使用することは非常にパフォーマンス です:
我々は通常1から調整可能な文字列を作ることができますストリームには が提供されます。パフォーマンスのためには、書式またはprincなど(書式の代わりに) を必ず使用してください。
か、わかりにくい代替方法として、FORMAT文字列をコンパイルできることを確認してください。 –