Haskell将浮点数转换为整数

10

我还是个新手,在创建一个函数时想要创建一个尽可能小的列表,它需要用到logBase x y。但我无法将logBase转换为可以在列表中使用的形式。

有什么建议吗?

3个回答

10
你没有说明具体的错误类型,但我想可能是类似这样的错误信息:
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]

使用truncate、celing或floor函数。

8

你可能需要这里的函数列表hereHoogleHayoo! 是这种工具的绝佳选择,因为它们允许您输入所需函数的类型,并返回一个函数列表。在Haskell丰富的类型系统下,这可以是一个非常有用的工具,比动态类型语言甚至像C或Java这样的静态类型语言更加有用。


2
你可能需要一些四舍五入、截断、向下取整或向上取整的函数。整数和浮点数是不同的类型(正如你所见),编译器不允许你混合使用它们。我一会儿就会找到一个参考资料。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接