2013-08-04 6 views
5

में स्ट्रिंग करने के लिए चरित्र को जोड़ना मेरे पास एक वर्ण ch है जो मैं str स्ट्रिंग में जोड़ना चाहता हूं। मुझे एहसास है कि आप इस तरह के तारों को जोड़ सकते हैं:सामान्य लिस्प

(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

आप एक ही स्ट्रिंग कई बार का विस्तार करना चाहते हैं, तो यह अक्सर काफी साथ-उत्पादन-से-स्ट्रिंग, लेखन का उपयोग करने के performant है:

हम एक सामान्य से एक से एक समायोज्य स्ट्रिंग कर सकते हैं स्ट्रीम पर यह प्रदान करता है। प्रदर्शन के लिए लिखें या प्रिंस आदि (प्रारूप के बजाय) का उपयोग करना सुनिश्चित करें।

+1

या अस्पष्ट विकल्प, सुनिश्चित करें कि FORMAT स्ट्रिंग को संकलित किया जा सकता है। –