簡體   English   中英

在Haskell中鍵入函數'floor'的錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM