如何编写一个 Haskell 程序来打印指定数字的素数?
Posted
技术标签:
【中文标题】如何编写一个 Haskell 程序来打印指定数字的素数?【英文标题】:How do I write a Haskell program that prints out the prime factors of a specified number? 【发布时间】: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 列表,而不是一个字符串。 谢谢,我是这个网站的新手,我会记住这一点,以备将来的问题 【参考方案1】:let x = factors $ (read number :: Int)
print x
或
number <- readLn
(感谢@Daniel)
这应该可以完成工作。
【讨论】:
它修复了 1 个错误,但我仍然收到“无法将 'Int' 类型与 'Char' 预期类型匹配:字符串,实际类型:[Int] @Tyler ...或者您可以为此派生Show
...如果您愿意
是的,我注意到在我发布评论后,它现在可以工作了,谢谢你们的帮助!以上是关于如何编写一个 Haskell 程序来打印指定数字的素数?的主要内容,如果未能解决你的问题,请参考以下文章