Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 漂浮的麻烦_Haskell - Fatal编程技术网

Haskell 漂浮的麻烦

Haskell 漂浮的麻烦,haskell,Haskell,如果这个问题真的是直截了当的话,我很抱歉,但是我已经把我随机编写的一段代码弄乱了一点,我很好奇为什么下面的代码无法编译: test::Floating a => Int -> [a] test x = map(\y -> (y * abs(cos(y)))) [0..x] 我试图理解大多数类型类,我考虑过使用浮点,因为我们使用的是余弦。该函数的目标是使用以下函数生成0到x的列表:\y->(y*abs(cos(y)) 然而,编译器抱怨x的类型(“无法将类型“a”与“Int”匹配

如果这个问题真的是直截了当的话,我很抱歉,但是我已经把我随机编写的一段代码弄乱了一点,我很好奇为什么下面的代码无法编译:

test::Floating a => Int -> [a]
test x = map(\y -> (y * abs(cos(y)))) [0..x]
我试图理解大多数类型类,我考虑过使用浮点,因为我们使用的是余弦。该函数的目标是使用以下函数生成0到x的列表:
\y->(y*abs(cos(y))

然而,编译器抱怨x的类型(“无法将类型“a”与“Int”匹配”),称它需要类型[a],但收到[Int]。
为什么会这样?毕竟,我正在将这些整数输入我的匿名函数,以获得一个浮点列表。

因为
x
是一个
Int
,这意味着
[0..x]
是一个
Int
的列表,因此
y
也是一个
Int
,因为所有函数都像
(*)::Num a=>a->a->a
要求两个操作数和结果的类型相同,因此这将不起作用

但是,您可以利用将一些
Integral
类型转换为任意
Num
类型:

test :: Floating a => Int -> [a]
test x = map(\y -> let yf = fromIntegral y in yf * abs (cos yf)) [0..x]
test::Floating a=>Int->[a]

测试x=map(\y->让yf=yf*abs中的积分y(cos-yf))[0..x]
因为
x
是一个
Int
,这意味着
[0..x]
是一个
Int
的列表,因此
y
也是一个
Int
,因为像
(*)这样的所有函数::Num a=>a->a->a
要求两个操作数和结果为同一类型,因此这将不起作用。有道理,谢谢!