我正在和初学者Haskell一起玩,我想写一个普通的函数.这似乎是世界上最简单的事情,对吧?
错误.
似乎Haskell的类型系统禁止平均处理泛型数字类型 - 我可以使它在Integrals列表或Fractionals列表上工作,但不能同时工作.
我想要:
average :: (Num a, Fractional b) => [a] -> b
average xs = ...
Run Code Online (Sandbox Code Playgroud)
但我只能得到:
averageInt :: (Integral a, Fractional b) => [a] -> b
averageInt xs = fromIntegral (sum xs) / fromIntegral (length xs)
Run Code Online (Sandbox Code Playgroud)
要么
averageFrac :: (Fractional a) => [a] -> a
averageFrac xs = sum xs / fromIntegral (length xs)
Run Code Online (Sandbox Code Playgroud)
而第二个似乎工作.直到我尝试传递变量.
*Main> averageFrac [1,2,3]
2.0
*Main> let x = [1,2,3]
*Main> :t x
x :: [Integer]
*Main> averageFrac x
<interactive>:1:0:
No …Run Code Online (Sandbox Code Playgroud) Haskell中有没有一种方法可以将元素添加到列表的末尾而不必遍历整个列表?
例如,如果我有列表,[1,2,3,4]并想在末尾添加5,例如:[1,2,3,4,5]
据我了解,++运算符将不得不对整个列表进行解散,这效率很低。
谢谢!