2013-12-10 3 views
7

तो मैं ऐसा कर सकते हैं: निर्दिष्ट के रूप में 80 वर्ष की अवधि के पारऔचित्य

CL-USER> (format t "~80<~a~;~a~;~a~;~a~>~%" "hello" "how are you" "i'm fine" "no you're not") 
hello    how are you    i'm fine    no you're not 

यह समान रूप से रिक्त स्थान 4 तार।

हालांकि, मैं तारों की एक सूची उत्तीर्ण करना चाहता हूं, और इसके बजाय यह सूची में शामिल होने के आधार पर इसे उचित ठहराना है।

न तो इनमें से यह कार्य करें:

CL-USER> (format t "~{~80<~a~;~>~}~%" '(1 2 3 4 5 6)) 
1 
2 
3 
4 
5 
6 

CL-USER> (format t "~80<~{~a~;~}~>~%" '(1 2 3 4 5 6)) 
; Evaluation aborted on #<SB-FORMAT:FORMAT-ERROR {126651E1}>. 
; ~; not contained within either ~[...~] or ~<...~> 

वहाँ यह करने के लिए कोई तरीका है?

उत्तर

7

आप format का उपयोग कर (format stream (format nil ...)) जहां औचित्य के लिए प्रारूप नियंत्रण उत्पन्न के साथ ऐसा कर सकते हैं:

CL-USER> (format nil (format nil "|~~40<~{~a~^~~;~}~~>|" '(1 2 3 4 5))) 
"|1  2   3   4   5|" 
CL-USER> (format nil (format nil "|~~40<~{~a~^~~;~}~~>|" '(1 2 3 4 5 6 7 8 9 10))) 
"|1 2 3 4 5 6 7 8 9 10|" 
CL-USER> (format nil (format nil "|~~40<~{~a~^~~;~}~~>|" '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))) 
"|1 2 3 4 5 6 7 8 9 10 11 12 13 14 15|" 

आप बाहरी format के लिए पूरे प्रारूप नियंत्रण उत्पन्न करने के लिए नहीं करना चाहते हैं, तो आप किसी भिन्न रूप का उपयोग कर सकते

CL-USER> (format nil "|[email protected]?|" (format nil "~~40<~{~a~^~~;~}~~>" '(1 2 3 4 5))) 
"|1  2   3   4   5|" 
CL-USER> (format nil "|[email protected]?|" (format nil "~~40<~{~a~^~~;~}~~>" '(1 2 3 4 5 6 7 8 9 10))) 
"|1 2 3 4 5 6 7 8 9 10|" 
CL-USER> (format nil "|[email protected]?|" (format nil "~~40<~{~a~^~~;~}~~>" '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))) 
"|1 2 3 4 5 6 7 8 9 10 11 12 13 14 15|" 

~? साथ पुनरावर्ती प्रसंस्करण केवल आप एक और रूप कार्रवाई करने के लिए अनुमति देता है: ~? के एक स्ट्रिंग और रिकर्सिवली कुछ तर्क कार्रवाई करने के लिए तर्कों की एक सूची के साथ नियंत्रण में; यह आपको एक नई प्रारूप स्ट्रिंग में विभाजित करने का कोई तरीका नहीं देता है। ऐसा प्रतीत होता है कि उचित पाठ को नियंत्रण स्ट्रिंग में मौजूद होना चाहिए, इसलिए आपको वास्तव में उस नियंत्रण स्ट्रिंग में विभाजित करने का एक तरीका चाहिए जिसमें पहले से ही वह टेक्स्ट शामिल हो जो आप चाहते हैं।

हालांकि इनमें से पहला आसान लगता है, इसमें कोई खतरा है क्योंकि आप मुद्रित पाठ को किसी अन्य प्रारूप स्ट्रिंग में डाल रहे हैं, और आप दूसरे मामले में ऐसा नहीं कर रहे हैं। पहले मामले में, यदि उनमें से कोई भी संख्या प्रारूप निर्देशों के साथ प्रतिस्थापित की गई थी, तो बाहरी प्रारूप उन्हें संसाधित करने का प्रयास करेगा। दूसरे मामले में, ऐसा नहीं होता है। ऐसे में, मुझे लगता है कि मैं दूसरा सुझाव दूंगा।

संबंधित मुद्दे