2011-02-25 5 views
7

में एक और बाकी पैरामीटर का विस्तार करना मान लीजिए कि मैं हर समय "प्रारूप टी ..." लिखने से थक गया हूं, और कुछ कम कीस्ट्रोक चाहता हूं।सामान्य लिस्प

तो मैं इस बारे में:।

(defun puts (fstring &rest vars) 
    (format t fstring vars)) 

(puts "~a ~a" 1 2) 

;; error message results, because vars became (1 2) 

अब, vars जो कुछ पैरामीटर मैं में पारित कर दिया की एक सूची के रूप में तब्दील कर दिया गया है यह पता मानों की सूची में "विस्तार" की जरूरत है।

इस समस्या को करने के लिए सामान्य समाधान क्या है?

उत्तर

11

आप उस के लिए apply उपयोग कर सकते हैं: (apply #'format t fstring vars)format को अलग तर्क में vars फैलता है।

+0

धन्यवाद। मैं हमेशा इस मुद्दे में भाग लेता हूं लेकिन मैं कभी भी याद नहीं कर सकता या पता नहीं कर सकता कि क्या करना है। –

2

apply के अलावा, वहाँ भी संभावना है कि यह एक मैक्रो जिसमें आप ,@ उपयोग कर सकते हैं backquotes अंदर सूचियों ब्याह करने के लिए के साथ क्या करना:

(defmacro puts (fstring &rest vars) 
    `(format t ,fstring ,@vars)) 
+1

मैंने यह भी किया है, लेकिन मैक्रोज़ और मैं अभी तक पर्याप्त आरामदायक नहीं हैं। :-) –

+0

कार्यों को प्राथमिकता दी जाती है, क्योंकि उनका उपयोग करना आसान होता है। –

+0

@Rainer: मुझे पता है कि मैक्रो का उपयोग करने के लिए कोई विशिष्ट आवश्यकता नहीं होने पर कार्यों को प्राथमिकता दी जानी चाहिए, लेकिन इस प्रश्न के शीर्षक (विस्तार और आराम पैरामीटर) के संदर्भ में यह मेरे लिए उल्लेखनीय प्रतीत होता है कि बैकक्वॉट में इसके लिए विशेष समर्थन है। –