2011-09-23 12 views
6

हाँड के साथ आने वाली हैमलेट टेम्पलेटिंग भाषा के साथ, अल्पविराम से अलग सूची को मुद्रित करने का सबसे अच्छा तरीका क्या है?हामा के साथ अल्पविराम से अलग सूची मुद्रित करने के लिए कैसे?

उदा। इस कोड को मानें जो सिर्फ एक प्रविष्टि को दूसरे के बाद प्रिंट करता है, मैं तत्वों के बीच अल्पविराम कैसे सम्मिलित करूं?

The values in the list are 
$ forall entry <- list 
    #{entry} 
and that is it. 

ऐसे Template Toolkit के रूप में कुछ templating भाषाओं प्रथम या अंतिम यात्रा पता लगाने के लिए निर्देश प्रदान करते हैं: या हो सकता है यहां तक ​​कि एक "और" अंतिम प्रविष्टि से पहले जोड़ें।

उत्तर

5

मुझे नहीं लगता कि इसमें कुछ भी बनाया गया है। सौभाग्य से, हैमलेट में सहायक कार्यों का उपयोग करना आसान है। उदाहरण के लिए, यदि आपके आइटम सादे तार हैं, तो आप उनके बीच अल्पविराम जोड़ने के लिए केवल Data.List.intercalate का उपयोग कर सकते हैं।

The values in the list are 
#{intercalate ", " list} 
and that is it. 

यदि आप प्रशंसक चीजें करना चाहते हैं, तो आप हेमलेट मूल्यों के साथ काम करने के लिए कार्य लिख सकते हैं। उदाहरण के लिए, यहां एक फ़ंक्शन है जो सूची में हैमलेट मानों के बीच अल्पविराम और "और" जोड़ता है।

commaify [x] = x 
commaify [x, y] = [hamlet|^{x} and ^{y}|] 
commaify (x:xs) = [hamlet|^{x}, ^{commaify xs}|] 

यह एक और में एक हेमलेट मूल्य डालने के लिए ^{...} सिंटैक्स का उपयोग करता। अब, हम इसका उपयोग रेखांकित शब्दों की अल्पविराम से अलग सूची लिखने के लिए कर सकते हैं।

The values in the list are 
^{commaify (map underline list)} 
and that is it. 

यहाँ, underline एक छोटी सहायक समारोह सादे पाठ से अधिक दिलचस्प कुछ का उत्पादन होता है।

underline word = [hamlet|<u>#{word}|] 

प्रस्तुत किए जाने पर, यह निम्नलिखित परिणाम देता है।

The values in the list are <u>foo</u>, <u>bar</u> and <u>baz</u> and that is it. 
+0

धन्यवाद, मुझे लगता है कि समाधान का अच्छा संग्रह है, हालांकि कोई भी टेम्पलेट हास्केल प्रदान करने के रूप में संतुष्ट नहीं है। हो सकता है कि मुझे एक विशेष ''' लूप''' चर के लिए पैच सबमिट करना चाहिए। –

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