[英]Type error of function 'floor' in Haskell
我有一個函數接受2個I n,x,並計算floor(log n / log x)。 這里n和x都非常有限,因此Int對我來說已經足夠了。
func :: Int -> Int -> Int
func nx = floor (log . fromIntegral n / (log . fromIntegral x))
但是這里出現了ghci中的錯誤:
No instance for (RealFrac (a -> b))
arising from a use of `floor' at p5_evenly_divide.hs:20:11-63
Possible fix: add an instance declaration for (RealFrac (a -> b))
In the expression:
floor (log . fromIntegral n / (log . fromIntegral x))
In the definition of `func':
func n x = floor (log . fromIntegral n / (log . fromIntegral x))
我怎么能通過這個?
表達式log . fromIntegral n
log . fromIntegral n
相當於log . (fromIntegral n)
log . (fromIntegral n)
,not (log . fromIntegral) n
,這可能是你想要的。 但是, log (fromIntegral n)
可能更具可讀性。
對於一般的啟發,當錯誤消息顯示No instance for (RealFrac (a -> b))
它告訴你它無法弄清楚如何將函數用作小數,它正在嘗試做,因為你正在申請函數組合(.)
到fromIntegral n
的結果。 在這種情況下,它有點遲鈍。
嘗試這個:
func :: Int -> Int -> Int
func n x = floor (k n / k x) where
k = log . fromIntegral
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.