2016-04-16 10 views
8

हास्केल में और अनुभव हासिल करने के लिए मेरी खोज पर, मैंने प्रिंट और प्रिंटफ के साथ काम करना शुरू कर दिया।क्या हास्केल में printf के प्रारूपों के साथ प्रिंट का उपयोग करने का कोई तरीका है?

मैं एक सरणी मुद्रित करने के लिए कोशिश करना चाहता था (अच्छी तरह से, कई, लेकिन यह सिर्फ एक शुरुआत है) और मैं प्रारूप "%+.4f" उपयोग करना चाहता था, जिसका अर्थ है मैं मिलेगा:

+2.1234 or -1.2345 

मैं हालांकि देखा है कि यह बहुत है printf का उपयोग करके एक सरणी मुद्रित करना मुश्किल है, इसलिए मैंने प्रिंट करने के लिए स्विच करने का प्रयास किया। इस तरह से एक सूची मुद्रित करना आसान लगता है, लेकिन मुझे यकीन नहीं है कि मैं printf के लिए उपयोग किए गए उसी प्रारूप का उपयोग करके सूची के तत्वों को कैसे मुद्रित कर सकता हूं।

[-1.2, 2.3, 4.7, -6.850399] 

उत्तर

3

दो वेरिएंट है कि एक ही करना चाहिए, printf के दो संभावित वापसी प्रकार का उपयोग:

putStrLn $ concatMap (printf "%+.4f\n") [-1.2, 2.3, 4.7, -6.850399] 
mapM_ (printf "%+.4f\n") [-1.2, 2.3, 4.7, -6.850399] 

संपादित करें:

putStrLn $ (concatMap . concatMap) (printf "%+.4f\n") [[-1.2, 2.3], [4.7, -6.850399]] 
(mapM_ . mapM_) (printf "%+.4f\n") [[-1.2, 2.3], [4.7, -6.850399]] 
+0

क्या कोई तरीका है कि मैं इसे सूचियों की सूची में लागू कर सकता हूं? उदाहरण के लिए कहें [[-1.2, 2.3], [4.7, -6.899]]। मुझे पूरा यकीन है कि नक्शा काम नहीं करेगा क्योंकि मैं कुछ सूचियों को मुद्रित करने के लिए कुछ मैप कर दूंगा। – Xzenon

+0

मुझे एक समाधान मिला, लेकिन यह वास्तव में आपके कार्यान्वयन का उपयोग नहीं करता है। मुझे अभी भी यह जानने में दिलचस्पी होगी कि आप उपरोक्त पोस्ट की गई सूचियों की सूची कैसे प्रिंट कर सकते हैं, हालांकि (आपके किसी भी समाधान का उपयोग करके)। – Xzenon

+0

सूचियों की सूची मुद्रित करने के लिए 'mapM_ (mapM_ (printf ...)) का उपयोग करें। – augustss

2

आप Numeric मॉड्यूल में कार्यों का उपयोग कर सकते हैं:

मेरी सूची में कुछ इस तरह लग रहा है। के लिए उदाहरण "% +। 4f" के रूप में

formatFloat x = showFFloat (Just 4) x "" 

तब आप अपने सूची पर इस समारोह मैप कर सकते हैं, स्ट्रिंग्स की एक सूची प्राप्त करने के लिए किया जा सकता है।

> map formatFloat [-1.2, 2.3, 4.7, -6.850399] 
["-1.2000","2.3000","4.7000","-6.8504"] 

(के बाद से इन पहले से ही तार कर रहे हैं मैं putStrLn बजाय print प्रयोग करेंगे उत्पादन दिखाने के लिए।)

+0

कि घ: गहरी दो सूचियों traversing के लिए वास्तव में "% + 4f" क्या नहीं करता है क्योंकि यह सकारात्मक संख्याओं के लिए "+" नहीं दिखाएगा। – Xzenon

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

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