यह एक सख्त घोषणा है। असल में, इसका मतलब यह है कि डेटा संरचना मूल्य बनने पर इसका मूल्यांकन "कमजोर सामान्य सिर फ़ॉर्म" कहलाता है।
data Foo = Foo Int Int !Int !(Maybe Int)
f = Foo (2+2) (3+3) (4+4) (Just (5+5))
ऊपर समारोह f
, जब मूल्यांकन किया, एक "thunk" वापस आ जाएगी: जो है, कोड अपने मूल्य पता लगाने की निष्पादित करने के लिए आइए एक उदाहरण को देखो तो यह है कि हम देख सकते हैं यह सिर्फ क्या मतलब है चलो । उस बिंदु पर, एक फू अभी तक कोड भी मौजूद नहीं है, बस कोड।
लेकिन कुछ बिंदु कोई शायद एक पैटर्न मैच के माध्यम से अंदर देखने के लिए, कोशिश कर सकते हैं पर:
case f of
Foo 0 _ _ _ -> "first arg is zero"
_ -> "first arge is something else"
यह यह क्या जरूरत है करने के लिए पर्याप्त कोड निष्पादित करने के लिए जा रहा है, और कोई और अधिक। तो यह चार पैरामीटर के साथ एक फू बना देगा (क्योंकि आप इसके बिना इसके अंदर नहीं देख सकते हैं)। पहला, चूंकि हम इसका परीक्षण कर रहे हैं, हमें 4
पर सभी तरह का मूल्यांकन करने की आवश्यकता है, जहां हमें पता चलता है कि यह मेल नहीं खाता है।
दूसरे को मूल्यांकन करने की आवश्यकता नहीं है, क्योंकि हम इसका परीक्षण नहीं कर रहे हैं। इस प्रकार, 6
उस स्मृति स्थान में संग्रहीत होने के बजाय, हम संभवतः बाद के मूल्यांकन के लिए कोड संग्रहीत करेंगे, (3+3)
। अगर कोई इसे देखता है तो वह केवल 6 में बदल जाएगा।
तीसरा पैरामीटर, इसके सामने !
है, इसलिए सख्ती से मूल्यांकन किया जाता है: (4+4)
निष्पादित किया गया है, और 8
उस स्मृति स्थान में संग्रहीत है।
चौथा पैरामीटर भी सख्ती से मूल्यांकन किया जाता है। लेकिन यहां वह थोड़ा मुश्किल हो गया है: हम पूरी तरह से मूल्यांकन नहीं कर रहे हैं, लेकिन केवल सामान्य सिर के रूप में कमजोर है। इसका मतलब यह है कि हम यह पता लगाते हैं कि यह Nothing
या Just
कुछ है, और उसे स्टोर करें, लेकिन हम आगे नहीं जाते हैं। इसका मतलब है कि हम Just 10
स्टोर नहीं करते हैं, लेकिन वास्तव में Just (5+5)
, बिना अनावश्यक अंदर थंक छोड़ते हैं। यह जानना महत्वपूर्ण है, हालांकि मुझे लगता है कि इस के सभी प्रभाव इस सवाल के दायरे से बाहर जाते हैं।
यदि आप BangPatterns
भाषा एक्सटेंशन सक्षम, उसी तरह से समारोह तर्क टिप्पणी कर सकते हैं:
f x !y = x*y
f (1+1) (2+2)
thunk (1+1)*4
वापस आ जाएगी।
मुझे संदेह है कि यह एक बहुत ही आम सवाल हो सकता है; मैं स्पष्ट रूप से ठीक उसी चीज के बारे में सोच रहा हूं, जिस तरह से वापस। –