में putStrLn को कॉल करने का प्रयास करने में त्रुटि मैं एक हैकेल फ़ंक्शन में 'प्रिंट आउट' फ़ंक्शन कॉल डालने का प्रयास कर रहा हूं।हैकेल: फ़ंक्शन
(एक साधारण डीबग संदेश)।
नीचे मेरा कोड और संकलक (त्रुटि 6.10) से त्रुटि संदेश है।
मुझे समझ में नहीं आता कि यह पुटस्ट्र कॉल और खाली सरणी क्यों लंप रहा है।
खाली सरणी उस विशेष मामले के लिए वापसी मूल्य है (प्रिंट आउट संदेश वास्तव में अभी केवल एक स्टब है)।
कोई विचार क्यों यह काम नहीं कर रहा है?
धन्यवाद
मेरे कोड:
isAFactor :: Integer -> Integer -> Bool isAFactor x y = x `mod` y == 0 findFactors :: Integer -> Integer -> [Integer] findFactors counter num = let quotient = div num 2 in if(counter > quotient) then do putStrLn ("factorList is : " ++ show quotient) (*** Line 10***) [] else if(isAFactor num counter) then [counter] ++ [quotient] ++ findFactors (counter + 1) num else findFactors (counter + 1) num
GHC
test.hs:10:4: Couldn't match expected type `[a] -> [Integer]' against inferred type `IO()' In the expression: putStrLn ("factorList is : " ++ show quotient) [] In the expression: do putStrLn ("factorList is : " ++ show quotient) [] In the expression: if (counter > quotient) then do putStrLn ("factorList is : " ++ show quotient) [] else if (isAFactor num counter) then [counter] ++ [quotient] ++ findFactors (counter + 1) num else findFactors (counter + 1) num
मुझे विश्वास है कि ऐसा इसलिए है क्योंकि findFactors एक शुद्ध कार्य है, इसलिए इसका कोई दुष्प्रभाव नहीं हो सकता है (जैसे आईओ)। हास्केल सब कुछ है। मुझे नहीं पता कि आपके फ़ंक्शन को डीबग करने के बारे में कैसे जाना है, हालांकि। सी ++ में मैं हर समय डीबग-लॉगिंग का उपयोग करता हूं। –
"डू" का मतलब यह नहीं है कि इसका क्या अर्थ है। यह मोनैड अनुक्रमण के लिए सिंटैक्स चीनी है; आप वास्तव में हास्केल में कुछ भी नहीं कर सकते हैं। :-) – ShreevatsaR