变量不在 Haskell 的范围内。这是什么意思?

Pau*_*ill -2 haskell functional-programming higher-order-functions

filter :: (a -> Bool) -> [a] -> [a]
filter =  (\x -> x % 2 == 0) [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

运行时在 Haskell 中使用下面的代码我得到一个错误:'变量不在范围内:(%) :: [Integer] -> Bool -> (a -> Bool) -> [a] -> [a]'

这是什么意思 ?

我试图创建一个接受列表并返回偶数的函数。对 haskell 如此陌生,这就是我所管理的,但我仍然遇到错误。我用谷歌搜索但我找不到解决方案

mar*_*rbu 5

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

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

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

<interactive>:1:1: error: Variable not in scope: %
Run Code Online (Sandbox Code Playgroud)

模数可用作mod函数。

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

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