gpt4 book ai didi

Haskell 歧义类型

转载 作者:行者123 更新时间:2023-12-02 12:21:30 24 4
gpt4 key购买 nike

findMult lst n = [x | x <- lst, x `mod` n == 0]

primes num =
let n = [2..num]
x = ceiling (sqrt num)
nsqrt = [2..x]
not_prime = map (findMult n) nsqrt
in diff2 n (concat not_prime)

当我尝试运行它时出现以下问题

<interactive>:1:0:
Ambiguous type variable `t' in the constraints:
`RealFrac t' arising from a use of `primes' at <interactive>:1:0-8
`Floating t' arising from a use of `primes' at <interactive>:1:0-8
`Integral t' arising from a use of `primes' at <interactive>:1:0-8
Probable fix: add a type signature that fixes these type variable(s)

我尝试使用 fromIntegral 但我认为我使用不正确,因为这给了我编译错误。请帮忙。

这样做的目的是找到 num 之前的所有素数。

最佳答案

当您在需要浮点值的地方使用整数值时,您会收到类似这样的错误消息(反之亦然)。

在这种情况下,问题在于您在 num 上调用 sqrt(它采用浮点值作为参数),使编译器认为 num 是一个浮点值。但也可以使用 num 作为 n 的上限,它是一个整数值列表(因为它用作 findMult 的参数,需要整数值列表)。

因此,在对 num 调用 sqrt 之前,先调用 fromIntegral ,如下所示:

x = ceiling (sqrt (fromIntegral num))

关于Haskell 歧义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4963100/

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