मेरे पास निम्न फ़ंक्शन परिभाषित किया गया है:यह हास्केल स्टेटमेंट आलसी मूल्यांकन क्यों नहीं करता है?
ex 1 x = 1
ex 0 x = 0
ex b x = b ** x
फिर, जब मैं निम्न निष्पादित करता हूं:
1 `ex` (sum [1..])
यह आलसी होने और लौटने की बजाय अनंत अनुक्रम के योग की गणना करने का प्रयास करता है। क्यों ?
संपादित करें: आगे की जांच के बाद, मैंने पाया कि आलसी तब होती है जब मैं एक फ़ाइल में ex
फ़ंक्शन को परिभाषित करता हूं, लेकिन यदि मैं इसे जीएचसीआई में परिभाषित नहीं करता हूं:
$ ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help
Loading package base ... linking ... done.
Prelude> let ex 1 x = 1
Prelude> let ex b x = b ** x
Prelude> ex 1 (sum [1..])
<interactive>: out of memory (requested 1048576 bytes)
अगर मैं ex
परिभाषा खींचता हूं एक फ़ाइल में (इस मामले में, test.hs):
$ ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help
Loading package base ... linking ... done.
Prelude> :load test.hs
[1 of 1] Compiling Main (test.hs, interpreted)
Ok, modules loaded: Main.
*Main> ex 1 (sum [1..])
1.0
नया प्रश्न, तो, क्यों है?
नहीं, 1 'ex' (sum [1 ..]) मेरे कंप्यूटर पर 1.0 लौटाता है। Ghc आदि का संस्करण क्या है? और क्या आपको पूर्व 1 (योग [1 ..]) के साथ एक ही परिणाम मिलता है? – ShreevatsaR
संभवतः एक बग? –
@ShreevatsaR: अच्छे अंक, ऊपर मेरा अपडेट देखें। – perimosocordiae