我是Haskell的新手,但我正在尝试向Haskell中的整数列表的所有成员添加一个浮点数,而我遇到了错误等问题.
基本上
addAll xs = map (+3.5) xs
Run Code Online (Sandbox Code Playgroud)
其中xs是整数列表.
在添加之前,您需要将每个转换Integer为a .FloatFloat
你可以用fromInteger它.它的类型是
Num a => Integer -> a
Run Code Online (Sandbox Code Playgroud)
为了我们的目的,这是专门为
Integer -> Float
Run Code Online (Sandbox Code Playgroud)
所以这是addAll函数的样子:
addAll :: [Integer] -> [Float]
addAll xs = map (\x -> fromInteger x + 3.5) xs
Run Code Online (Sandbox Code Playgroud)
GHCi中的示例用法:
?> addAll [1, 2, 3]
[4.5,5.5,6.5]
Run Code Online (Sandbox Code Playgroud)
它可以是- [Float]或者[Integer]在Haskell中你应该明确这一点.
[Integer]round在乘法之前,您需要浮点数:
map (+ (round (3.5 :: Float))) [1..(10 :: Integer)]
Run Code Online (Sandbox Code Playgroud)
[Float]或者转换整数 fromInteger
[3.5 + fromInteger x | x <- xs]
map ((+3.5) . fromInteger) xs
Run Code Online (Sandbox Code Playgroud)
因为只有两个加号都是相同的类型才能添加数字,你可以在类型签名中看到这个
(+) :: Num a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)
所有as必须是相同的并且是Num-typeclass的一个实例(如果你有经验的话,Java中的接口很相似).
注意:Haskell 1中没有自动转换.
1:除了数字文字像0,1,2…它们使用被转换fromInteger,像数字文本1.1,2.2等等都由转换fromRational和String文字当启用OverloadedStrings与fromString.
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |