मैं बस हैकेल सीखना शुरू कर रहा हूं, और यह मेरे द्वारा उपयोग की जाने वाली चीज़ों की तुलना में सोचने का एक अलग तरीका है (सी शैली भाषाएं)।उपयोगकर्ता इनपुट को स्वीकार करने के लिए हैकेल तरीका उपयोगकर्ता द्वारा कई बार इनपुट किया गया है?
वैसे भी, एक समस्या के लिए मैं काम कर रहा हूं मुझे उपयोगकर्ता इनपुट प्राप्त करने की आवश्यकता है। यह
2
10
20
उदाहरण के लिए फॉर्म में आएगा। प्रारूप पहली पंक्ति है जो अनुसरण करने वाली रेखाओं की संख्या कहता है। मेरा पहला विचार था कि मैं पहली पंक्ति पढ़ूंगा, फिर उस लूप को उस समय की संख्या में चलाएं। हालांकि यह हास्केल है! जहां तक मुझे पता है, लूप संभव नहीं हैं।
मेरा अगला विचार यह था कि मैं सूची की अन्य संख्याओं के साथ सूची भरने के लिए इनपुट की पहली पंक्ति का उपयोग करूंगा। मुझे नहीं पता कि मैं यह कैसे करूंगा। मैं यहाँ हूं क्योंकि मुझे यह भी यकीन नहीं है कि मैं इसे समझने के लिए क्या खोजूँगा।
मुझे ऐसा करने के लिए हैकसेल तरीका दिखाने के लिए अग्रिम धन्यवाद। अब तक मुश्किल हो रही है, लेकिन मैं उन लोगों से समीक्षाओं को सुनता हूं जो "प्रबुद्ध" हैं इसलिए मुझे लगता है कि यह भाषा सीखने के लिए चोट नहीं पहुंचा सकती है।
यह कोड है जो एक बार ठीक हो जाएगा, लेकिन पहली पंक्ति का पालन करने वाली एन लाइनों के माध्यम से प्रत्येक दूसरे के लिए एक बार चलाने की जरूरत है।
l n = (-1)^n/(2*(fromIntegral n)+1)
a m = sum [l n | n <- [0..(m-1)]]
main =
do b <- readLn
print (a b)
(इसके अलावा, मैं अगर वहाँ अन्य सुधार मैं अपने कोड के लिए कर सकता है कर रहे हैं सुनने के लिए प्यार होता है, लेकिन इस विशिष्ट मामले में यह एक प्रतियोगिता संभव पात्रों और उनमें कम में एक समस्या को हल करने के लिए है। मैं यदि अन्य लोग एक ही समस्या के उत्तर की तलाश करने की कोशिश कर रहे हैं तो अधिक विशिष्ट नहीं होना चाहते हैं।)
संपादित करें: हर किसी के उत्तर के लिए धन्यवाद। मुझे अंत में ऐसा कुछ मिला जो व्यवहार करता था कि मैं इसे कैसे चाहता था। मैंने पोस्टरिटी के लिए नीचे दिए गए कोड को रखा है। अफसोस की बात है, भले ही यह उड़ान रंगों के साथ परीक्षण मामलों को पारित कर दिया गया हो, फिर भी उन्होंने जिस वास्तविक डेटा का परीक्षण किया वह अलग था, और वे सभी मुझे बताते हैं कि मुझे "गलत जवाब" मिला है। यह कोड "काम करता है" लेकिन आपको सही उत्तर नहीं मिलता है।
import Control.Monad
l n = (-1)^n/(2*(fromIntegral n)+1)
a m = sum [l n | n <- [0..(m-1)]]
main =
do b <- readLn
s <- replicateM b readLn
mapM_ print [a c | c <- s]
शायद यह गोल करने में त्रुटि हो रही है? शायद आखिरी मिनट में एक फ्लोट में कनवर्ट करने के बाद तर्कसंगत संख्याओं का उपयोग करने का प्रयास करें: ('डेटा आयात करें। डेटाियो ',' एल :: इंटीजर -> तर्कसंगत', और 'mapM_ (प्रिंट। RealToFrac) ' – luqui
यह प्रकार था पूर्णन त्रुटि। ऐसा करने के बाद भी यह गलत था। मेरी समस्या यह थी कि मैं सटीक था। मैं परिशुद्धता के दशमलव के बाद 16 अंकों की तरह दे रहा था, लेकिन वे केवल 15 अंक चाहते थे। क्या ऐसा करने के लिए कोई हैकेल तरीका है? यह समस्या ऐसी चीज नहीं है जिसे आप असली जिंदगी में चलाएंगे। ज्यादातर कंपनियां कभी भी कम सटीकता के लिए नहीं पूछतीं, और जितनी संभव हो उतनी पात्र (इन भयानक 1 वर्ण परिवर्तनीय नामों के कारण) – maccam912
आपको लूप रखने के लिए केवल एक सूची बनाने की आवश्यकता नहीं है: 'main = do {b <- readLn; replicateM_ b (do {c <- readLn; प्रिंट (एक सी)})} ''। या लूप को सीधे रिकर्सन के साथ कोड किया जा सकता है: 'main = readLn >> = loop'; 'लूप एन | एन <1 = वापसी() | अन्यथा = readLn >> = (प्रिंट ए) >> लूप (एन -1) '। –