变量不在Haskell的范围内。这是什么意思?
filter :: (a -> Bool) -> [a] -> [a]
filter = (x -> x % 2 == 0) [1,2,3,4,5]
运行时在 Haskell 中使用下面的代码我得到一个错误:'变量不在范围内:(%) :: [Integer] -> Bool -> (a -> Bool) -> [a] -> [a]'
这是什么意思 ?
我试图创建一个接受列表并返回偶数的函数。对 haskell 如此陌生,这就是我所管理的,但我仍然遇到错误。我用谷歌搜索但我找不到解决方案
回答
它只是意味着%没有定义。
当我打开 ghci shell 并询问+and%运算符的类型时,我看到它+已定义,但是%我得到了相同的错误:
Prelude> :t (+)
(+) :: Num a => a -> a -> a
Prelude> :t (%)
<interactive>:1:1: error: Variable not in scope: %
模数可用作mod函数。
不过,您的示例中还有其他一些问题:
- 已经有一个
filter在 prelude 中命名的函数 - 您正在函数定义中传递参数(整数列表)
- 您正在将整数列表传递给接受单个整数的 lambda 函数