【发布时间】:2017-04-24 10:15:04
【问题描述】:
这是我到目前为止所拥有的,我很确定函数本身是正确的,但我对在 main = do 块中做什么感到困惑。 我得到的错误是该函数需要一个整数,但我给它一个字符串。我假设它与 getLine 部分有关,而且我没有检查输入的数字是否为 int。
factors :: Int -> [Int]
factors n = [x | x <- [1..n], mod n x == 0]
primeFactors :: Int -> [Int]
primeFactors n = [x | x <- [1..n], mod n x == 0, isPrime x]
isPrime x = (length (factors x)) == 2
main = do
putStrLn "Enter a number."
number <- getLine
let x = factors number
putStrLn x
我在运行这段代码时遇到的错误:
primeFactor.hs:9:19: 错误:
• 无法将类型“[Char]”与“Int”匹配 预期类型:Int 实际类型:字符串 • 在‘factors’的第一个参数中,即‘number’ 在表达式中:因子数 在“x”的等式中:x = 因子数primeFactor.hs:10:12: 错误:
• 无法将“Int”类型与“Char”匹配 预期类型:字符串 实际类型:[Int] • 在‘putStrLn’的第一个参数中,即‘x’ 在“do”块的 stmt 中:putStrLn x 在表达式中: do { putStrLn "输入一个数字。"; 数字
【问题讨论】:
-
请在您的问题中包含实际的错误消息,而不是提供释义或删节版本。它们真的很有用。您在评论中询问的错误消息是因为 putStrLn 想要一个字符串,而 x 是一个 Ints 列表,而不是一个字符串。
-
谢谢,我是这个网站的新手,我会记住这一点,以备将来的问题
标签: haskell