मैं हास्केल में कुछ ऐसा है जो इस तरह दिखता है क्या करना चाहते हैं:हास्केल "कुछ भी नहीं" आईओ, या यदि बिना किसी
main1 = do s <- getLine
if s == "foo" then putStr "You entered foo"
जाहिर है यह नहीं कानूनी के बाद से वहाँ कोई else
है। एक विकल्प मैंने सोचा है:
nop :: IO()
nop = sequence_ []
main2 = do s <- getLine
if s == "foo" then putStr "You entered foo" else nop
यह एक छोटा वर्बोज़ है, लेकिन यदि आवश्यक हो तो मैं इसके लिए बसूंगा। अगर nop
का अंतर्निहित संस्करण नहीं था, तो मुझे आश्चर्य होगा।
वैकल्पिक रूप से:
doIf :: Bool -> IO() -> IO()
doIf b m = if b then m else nop
main3 = do s <- getLine
doIf (s == "foo") (putStr "You entered foo")
यह अधिक संक्षिप्त है, लेकिन विशेष रूप से वाक्य रचना अच्छा नहीं है। दोबारा, मैं कुछ ऐसा अंतर्दृष्टि खोजने में आश्चर्यचकित नहीं हूं जो पहले से मौजूद है।
ऐसा करने का पसंदीदा तरीका क्या है?
ओह, मैंने वापसी के बारे में सोचा() लेकिन यह सोच रहा था कि यह वास्तव में वापस आ जाएगा (यानी डू-एक्सप्रेशन में बाकी चीजें शॉर्ट-सर्किट)। मेरी गलती। जब सूचक के लिए धन्यवाद। –
रिटर्न इसके लिए एक बुरा नाम है, हाँ :) – bdonlan
@ डेव ध्यान रखें कि हास्केल में 'वापसी' भाषा का निर्माण नहीं है, यह सिर्फ एक समारोह है (बीडोनियन कहता है कि बुरी तरह से चुने गए नाम के साथ)। रिटर्न नियंत्रण प्रवाह या कुछ प्रभाव को प्रभावित नहीं करता है, आप लिख सकते हैं: 'do {s <- getLine; वापसी(); putStrLn s} 'जो ठीक से निष्पादित करेगा। –