मैं एक हास्केल नौसिखिया हूं इसलिए मुझे उस मामले में कुछ मूलभूत माफ़ी याद आ रही है, लेकिन मुझे यह नहीं पता कि निम्नलिखित कोड में क्या गलत है और यह ढेर क्यों बहती है। यह सबसे छोटी संख्या को खोजने के लिए है जो [1..x] में सभी संख्याओं द्वारा समान रूप से विभाजित है, यहां [1,2] का उपयोग कर रहा है (प्रोजेक्ट यूलर Problem 5 [1..20] के लिए है)।बहुत सरल कोड में ओवरफ़्लो ढेर
module Main where
main::IO()
main = do
putStrLn $ show s where s = func 1
func :: Int -> Int
func x
| foldr1 (&&) [x `mod` y == 0 | y <- [1..2]] == True = x
| otherwise = func x+1
मुझे लगता है कि इसे '2' प्रिंट करना चाहिए।
मैंने पहले गार्ड के बजाय and [mod x y == 0 | y <- [1..2]] == True = x
का उपयोग करने का भी प्रयास किया। दोनों मामलों में मुझे इसे चलाने की कोशिश करते समय एक स्टैक ओवरफ़्लो मिल रहा है। मैंने सबकुछ मुख्य रूप से एक और सूची समझ में डालकर समस्या हल कर ली है, लेकिन मैं समझना चाहता हूं कि इस के साथ क्या गलत है। धन्यवाद!
आप '== True' को छोड़ सकते हैं। – Franky