我仍然是新手,正在尝试创建要在函数中使用的列表,并希望将其保持尽可能小,恰好是logBase x y。
但我无法将logBase放入可以在此列表中使用的东西。

[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

返回Floating类中的类型,而程序中的其他变量(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]

使用截断,清除或铺地板。

08-24 14:47