我還是個新手,試圖創建一個在函數中使用的列表,並希望儘可能保持它小到logBase x y。 但我無法將logBase放入我可以在此列表中使用的東西。Haskell將Float轉換爲Int
[1 ..(logBase x和y)]
任何建議?
我還是個新手,試圖創建一個在函數中使用的列表,並希望儘可能保持它小到logBase x y。 但我無法將logBase放入我可以在此列表中使用的東西。Haskell將Float轉換爲Int
[1 ..(logBase x和y)]
任何建議?
你不要張貼你得到了什麼類型的錯誤,但我想它是這樣的:
Prelude> let x = 2
Prelude> let y = 7
Prelude> [1 .. (logBase x y)]
<interactive>:1:7:
No instance for (Floating Integer)
arising from a use of `logBase' at <interactive>:1:7-17
Possible fix: add an instance declaration for (Floating Integer)
In the expression: (logBase x y)
In the expression: [1 .. (logBase x y)]
In the definition of `it': it = [1 .. (logBase x y)]
的問題是:
Prelude> :t logBase
logBase :: (Floating a) => a -> a -> a
返回浮動類的類型,而程序中的其他變量(1,'x','y')是整數類型的。
我想你想要一個整數序列?
Prelude> :set -XNoMonomorphismRestriction
Prelude> let x = 2
Prelude> let y = 42
Prelude> [1 .. truncate (logBase x y)]
[1,2,3,4,5]
使用截斷,細胞或地板。
您可能想要某種舍入,截斷,平面或吊頂功能。 Ints和Floats是不同的類型(如你所見),編譯器不會讓你混合它們。我會在一分鐘內找到一個參考。