Haskell如何将float添加到整数列表的所有成员

时间:2018-01-29 01:05:44

标签: haskell

我是Haskell的新手,但是我试图在Haskell中为整数列表的所有成员添加一个浮点数,而且我无法克服错误等等。

基本上

addAll xs = map (+3.5) xs

其中xs是整数列表。

2 个答案:

答案 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中你应该明确这一点。

1。 [Integer]

在乘法之前,您需要round浮点数:

[Integer]

2。 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…转换,数字文字如fromInteger1.1等当您使用2.2启用String时,会按fromRationalOverloadedStrings文字进行转换。