私は 'print'関数呼び出しをhaskell関数に入れようとしています。haskell:関数内でputStrLnを呼び出そうとしたときにエラーが発生しました
(単純なデバッグメッセージ)。
以下は私のコードとコンパイラのエラーメッセージです(ghc 6.10)。
なぜputstr呼び出しと空の配列を束縛しているのかよくわかりません。
空の配列は、その特定のケースの戻り値です(プリントアウトメッセージは実際にはスタブです)。
これはなぜ機能していないのでしょうか?
おかげ
マイコード:
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は純粋な関数なので、副作用(IOなど)がない可能性があるためだと思います。これがハスケルのことです。私はあなたの関数をデバッグする方法を知りませんでした。 C++では、常にデバッグログを使用しています。 –
"do"は、あなたが何を意味するかを意味するものではありません。モナドシーケンシングのシンタックスシュガーです。あなたは実際にハスケルで何かを "行う"ことはできません。 :-) – ShreevatsaR