शायद यह सब (आलस्य की खुशी) पर मूल्यांकन नहीं है - लेकिन अगर ऐसा है, यह केवल एक बार मूल्यांकन किया जाना चाहिए - अगर आप चाहें, तो आप trace
साथ खुद के लिए कोशिश कर सकते हैं:
import Debug.Trace(trace)
func n = m ++ [1] ++ m ++ [0] ++ m
where m = func2 n
func2 n = trace "called..." [n]
यहाँ है GHCi में एक उदाहरण:
λ> func 3
called...
[3,1,3,0,3]
और यहाँ एक है जहाँ आप देखते हैं कि यह कहा जाता है नहीं हो सकता है (जब तक आप अंततः यह मूल्यांकन करने की जरूरत):
λ> let v = func 4
λ> v
called...
[4,1,4,0,4]
देखें: पहले इसे नहीं कहा जाता है - केवल तभी जब आप अंततः v
(इसे प्रिंट करने के लिए) का मूल्यांकन करते हैं तो आपको कॉल मिलता है।
धन्यवाद - बहुत अच्छा मुद्दा - मैंने वास्तव में यहां इस बारे में नहीं सोचा था। जब इस तरह के विवरणों की बात आती है तो हास्केल पर सही उत्तर देना वास्तव में कठिन होता है - आमतौर पर एक ऐसा एक्सटेंशन होता है जो आपके अंतर्ज्ञान को बेकार करता है: * ( – Carsten