【问题标题】:Variable not in scope in Haskell. What does this mean? [duplicate]变量不在 Haskell 的范围内。这是什么意思? [复制]
【发布时间】:2021-06-25 15:54:52
【问题描述】:
filter :: (a -> Bool) -> [a] -> [a]
filter =  (\x -> x % 2 == 0) [1,2,3,4,5]

在运行时在 Haskell 中使用以下代码时出现错误: '变量不在范围内: (%) :: [整数] -> Bool -> (a -> Bool) -> [a] -> [a]'

这是什么意思?

我正在尝试创建一个接受列表并返回偶数的函数。对haskell如此陌生,这就是我所做的一切,但我仍然遇到错误。我已经google了,但我找不到解决方案

【问题讨论】:

  • 您的第一行是filter 库函数的正确类型签名。您的第二行是filter 的重新定义,它隐藏了库中的定义。编译器正在尝试将您的过滤器定义与库中的正确类型统一

标签: haskell functional-programming higher-order-functions


【解决方案1】:

这只是意味着%没有定义。

当我打开 ghci shell 并询问 +% 运算符的类型时,我看到 + 已定义,但对于 % 我得到了同样的错误:

Prelude> :t (+)
(+) :: Num a => a -> a -> a
Prelude> :t (%)

<interactive>:1:1: error: Variable not in scope: %

Modulus 可用作 mod 函数。

您的示例中还有一些其他问题:

  • prelude 中已经有一个名为filter 的函数
  • 您正在函数定义中传递参数(整数列表)
  • 您正在将一个整数列表传递给一个接受单个整数的 lambda 函数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2011-05-22
    • 2015-03-12
    相关资源
    最近更新 更多