我是Haskell的新手,我正在編寫一個計算函數限制的程序。因此,考慮兩個列表a
和b
,增量dx = 0.001
和集成l
和r
的限制,我想遞歸地計算曲線下面積與方程: a1(x)^b1 + a2(x)^b2 + ... + an(x)bn
其中x
是的增量l
的r
之間所有的值各個值之間爲dx
。該技術部分不是那麼重要我猜,但它有助於閱讀代碼:由於使用「區域」而沒有出現(Fractional Int)實例
import Text.Printf (printf)
-- This function should return a list [area].
solve :: Int -> Int -> [Int] -> [Int] -> [Double]
solve l r x y = [area l r x y]
area l r a b = if (l < r)
then (calc l a b) * 0.001 + (area (l + 1) r a b)
else (calc r a b) * 0.001
calc n (a:arest) (b:brest) = (fromIntegral(n) ^^ b) * fromIntegral(a) + (calc n arest brest)
calc n [] [] = 0
--Input/Output.
main :: IO()
main = getContents >>= mapM_ (printf "%.1f\n"). (\[a, b, [l, r]] -> solve l r a b). map (map read. words). lines
我沒有得到任何錯誤與上面的代碼,但只要我改變area (l + 1) r a b
到area (l + 0.001) r a b
我收到以下錯誤信息:
No instance for (Fractional Int) arising from a use of `area'
我試着做一個新的類,有一個抽象類型,但沒有工作,任何其他的想法?
嘗試向所有頂層函數添加類型簽名。例如,這也將幫助您澄清哪些參數應該是整數,哪些應該是雙倍。 – chi