我是Haskell的新手,但是我试图在Haskell中为整数列表的所有成员添加一个浮点数,而且我无法克服错误等等。
基本上
addAll xs = map (+3.5) xs
其中xs是整数列表。
答案 0 :(得分:7)
您需要先将每个Integer
转换为Float
,然后才能向其添加Float
。
您可以使用fromInteger
。它的类型是
Num a => Integer -> a
,为了我们的目的,专门研究
Integer -> Float
所以这是addAll
函数的样子:
addAll :: [Integer] -> [Float]
addAll xs = map (\x -> fromInteger x + 3.5) xs
GHCi中的用法示例:
λ> addAll [1, 2, 3]
[4.5,5.5,6.5]
答案 1 :(得分:5)
它可以是{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 10000,
"max_score": 1,
"hits": [
{
"_index": "record_new",
"_type": "record_new",
"_id": "AWChga1952qKS23vpN8J",
"_score": 1,
"_source": {
"TITLE":{
"ABC",
"BNM"
}
}
}]
}
}
或[Float]
- 在Haskell中你应该明确这一点。
[Integer]
在乘法之前,您需要round
浮点数:
[Integer]
map (+ (round (3.5 :: Float))) [1..(10 :: Integer)]
或使用fromInteger
[Float]
由于添加数字仅适用于两个加号类型相同的情况,您可以在类型签名中看到此信息
[3.5 + fromInteger x | x <- xs]
map ((+3.5) . fromInteger) xs
所有(+) :: Num a => a -> a -> a
必须是相同的并且是a
- 类型类的实例(如果您有相关经验,那么Java中的接口非常相似)。
注意:Haskell 1 中没有自动转换。
1 :除Num
之类的数字文字外,它们使用0,1,2…
转换,数字文字如fromInteger
,1.1
等当您使用2.2
启用String
时,会按fromRational
和OverloadedStrings
文字进行转换。