2013-08-04 2 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

또는 모호한 대안으로 FORMAT 문자열을 컴파일 할 수 있는지 확인하십시오. –

관련 문제