2013-08-04 11 views
5

私は文字列strに追加したい文字chを持っています。Common Lispの文字列に文字を追加する

(setf str (concatenate 'string str (list ch))) 

しかし、これはかなり効率が悪いようです。単一の文字を追加するより速い方法がありますか?

答えて

10

文字列に塗りつぶしポインタがあり、調整可能な場合もあります。

調整可能=そのサイズを変更できます。

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!" 
7

あなたは、単一の文字列を複数回延長したい場合は、それは多くの場合で、出力 - 文字列、書き込みを使用することは非常にパフォーマンス です:

我々は通常1から調整可能な文字列を作ることができますストリームには が提供されます。パフォーマンスのためには、書式またはprincなど(書式の代わりに) を必ず使用してください。

+1

か、わかりにくい代替方法として、FORMAT文字列をコンパイルできることを確認してください。 –

関連する問題