gpt4 book ai didi

haskell - 函数 `(y * y) < x' 应用于两个参数,但它的类型 `Bool' 没有

转载 作者:行者123 更新时间:2023-12-03 14:40:07 25 4
gpt4 key购买 nike

所以我正在处理 Problem 31 .

我编写了以下函数,希望能确定一个数是否为素数:

isPrime :: Integer -> Bool

isPrime x = prime x 2
where
prime :: Integer -> Integer -> Bool
prime x y | ((y*y) < x) and ((x `mod` y) /= 0) = prime x (y+1)
| ((y*y) >= x) = True
| otherwise = False

我的逻辑是做一个 isPrime功能,并且在 isPrime内有一个功能叫 prime存储 2 个参数,我想检查的数字是否为素数( x )和一个迭代器,用于检查 x 的 sqrt 以下的所有数字,并查看它们是否除以 x . prime有3个守卫:
| ((y*y) < x) and ((x `mod` y) == 0) = prime x (y+1)

这行应该说:是我传递的数字小于 x 的平方根( ((y*y) < x) ),如果是检查 x可以被 y 整除( ((x mod y) /= 0) ),如果不是,我使用递归并增加 y 以使用更高的数字再次检查。

这一行:
| ((y*y) >= x) = True

应该是,如果平方根以下的所有数字都不能将 x 整除,则 x 必须是素数。

最后,这一行:
| otherwise = False

意味着沿线某处的数字除以 x 所以它不是素数。

我认为我写的代码是有道理的,我知道它不是最有效的,考虑到我可以只检查 sqrt x 以下的素数而不是 sqrt x 以下的所有数字,但无论如何,我对这个语句有问题:
((y*y) < x)

GHCi 说:
The function `(y * y) < x' is applied to two arguments, but its type `Bool' has none

我以为 <应该接受两个参数并返回一个 bool 值,错误消息对我来说没有意义。你能帮我弄清楚我做错了什么吗?谢谢。

现在我让它运行了,快速编辑,这一行:
| ((y*y) >= x) = True

应该:
| ((y*y) > x) = True

最佳答案

我想你的意思是使用 &&而不是 and .这样做之后,它加载没有任何错误。

关于haskell - 函数 `(y * y) < x' 应用于两个参数,但它的类型 `Bool' 没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9731441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com