निम्नलिखितक्या पैटर्न पैटर्न के भीतर मूल्यांकन ऑर्डर के बारे में कोई गारंटी है?
(&&) :: Bool -> Bool -> Bool
False && _ = False
True && False = False
True && True = True
वांछित शॉर्ट सर्किट संपत्ति False && undefined ≡ False
है। पहला खंड, जो कि सही तर्क में गैर-सख्त है, किसी और चीज की कोशिश करने से पहले जांच की गारंटी है।
जाहिर है, यह अभी भी काम करता है अगर मैं आदेश को बदल और यहां तक कि समारोह
both :: (Bool,Bool) -> Bool
both (True,False) = False
both (True, True) = True
both (False, _) = False
Prelude> both (False, undefined)
False
uncurry लेकिन यह वास्तव में मानक की गारंटी है? खंडों के आदेश के विपरीत, पैटर्न के मूल्यांकन का आदेश यहां इतना स्पष्ट नहीं है। क्या मैं वास्तव में यह सुनिश्चित कर सकता हूं कि (True,False)
से मिलान (False,_)
को समाप्त कर दिया जाएगा, एसएनडी तत्व का मूल्यांकन करने से पहले?