我对 Haskell 完全陌生,我正在尝试编写一个函数,如果给定一个整数列表和另一个整数 n 将返回一个布尔值,无论整数是否在列表中。
所以我写道:
l=[n..m]
occurs :: Int -> [Int] ->Bool
occurs x l
| x `elem` l = True
| otherwise = False
但我得到'unexpected ='或其他什么的语法错误。
该函数occurs
编译良好。然而,这个表达l = [n..m]
是无意义的,除非合适的定义n
和m
已经存在。
您的代码存在更大的问题。请注意,elem :: Eq a => a -> [a] -> Bool
这与 的类型非常相似occurs
,特别是考虑到Int
是 的一个实例Eq
。
此外,l
您的定义中occurs
的 与l = [m..n]
上面的行不同。l
inoccurs
是一个自由变量,在occurs
调用时绑定到某个值。
如果我很好地理解了您的问题,那么理想的功能本质上就是elem
foo :: Eq a => a -> [a] -> Bool
foo x l = x `elem` l
foo 将返回 true 或 false。