Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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_Integer - Fatal编程技术网

Haskell列表理解,从数字列表中删除整数

Haskell列表理解,从数字列表中删除整数,haskell,integer,Haskell,Integer,我想在列表理解中实现一个函数。 它应该删除数字列表中的整数 xxx.hs> delete [1,2,3.0,4.5,6.7] [1.0,2.0,3.0] 我有一个问题 delete xs = [ys|ys<-xs, ys /=fromInteger (round ys) ] xxx.hs> delete [1,2,3.0,4.5,6.7] [4.5,6.7] 既然我没有给出十进制形式的数字1和2,为什么它返回十进制形式的数字 谢谢你帮助我 我

我想在列表理解中实现一个函数。 它应该删除数字列表中的整数

xxx.hs> delete [1,2,3.0,4.5,6.7]
       [1.0,2.0,3.0]
我有一个问题

delete xs = [ys|ys<-xs, ys /=fromInteger (round ys) ]

xxx.hs> delete [1,2,3.0,4.5,6.7]
        [4.5,6.7]
既然我没有给出十进制形式的数字1和2,为什么它返回十进制形式的数字

谢谢你帮助我

我想在列表理解中实现一个函数。它应该删除数字列表中的整数

xxx.hs> delete [1,2,3.0,4.5,6.7]
       [1.0,2.0,3.0]
在列表中,所有元素都具有相同的类型。因此,在列表
[1.2,3,4.5]
中,
3
也是一个类型的值,该类型是
浮动
类型的成员

既然我没有以十进制形式给出数字
1
2
,为什么它以十进制形式返回数字

因为所有元素的类型都相同。GHC将默认为双倍

您的筛选器未指定元素应为
整数类型。这也是不合理的,因为类型是在编译时解析的,而不是在运行时解析的。如果您从整数(四舍五入的ys)
中选择
fromInteger,它只会检查
ys
是否相同。由于在这种情况下,
round 3.0==3
,以及
from integer 3==3.0
,因此它会过滤掉带有小数部分的元素<代码>1.0
2.0
没有小数部分


然而,过滤是不安全的,对于较大的数字,尾数不能精确地表示每个整数,因此这意味着当这些值不是整数时,将过滤保留一些值。有关更多信息,请参阅。

列表中的所有元素都具有相同的类型。由于
,您甚至将其限制为
浮动
类型的成员。相关的,好的,我知道了。由于>fromInteger 9.0返回一个错误而不是False,是否有未导入模块的函数在>function 9.0时返回False?@JohnTang:否,因为不保留导致中的值的确切文本
5.0
5
都可以是
Double
s,它们是相同的
Double
isInteger x=fromIntegral(round x)==x
没有我可以看到的精度问题……如果一个数字没有足够的精度来表示小数部分,那么它就没有小数部分(例如
2^23+0.5::Float
=
2^23
2^23+1
)。
round
,使用round-to-even,这两种方法都不会改变。也就是说,浮点是微妙的,所以在“no-import”约束下,我认为使用
properFraction
isInteger x=let(_-int,frac)更为清晰=properFraction x in frac==0.0
;或者任意精度
数据。比率
isInteger x=分母(扭矩x)==1