0

我对 Haskell 完全陌生,我正在尝试编写一个函数,如果给定一个整数列表和另一个整数 n 将返回一个布尔值,无论整数是否在列表中。

所以我写道:

l=[n..m]
occurs :: Int -> [Int] ->Bool
occurs x l
  | x `elem` l = True
  | otherwise  = False

但我得到'unexpected ='或其他什么的语法错误。

错误信息截图

4

2 回答 2

6

该函数occurs编译良好。然而,这个表达l = [n..m]是无意义的,除非合适的定义nm已经存在。

您的代码存在更大的问题。请注意,elem :: Eq a => a -> [a] -> Bool这与 的类型非常相似occurs,特别是考虑到Int是 的一个实例Eq

此外,l您的定义中occurs的 与l = [m..n]上面的行不同。linoccurs是一个自由变量,在occurs调用时绑定到某个值。

于 2014-03-31T19:45:53.417 回答
0

如果我很好地理解了您的问题,那么理想的功能本质上就是elem

foo :: Eq a => a -> [a] -> Bool
foo x l = x `elem` l

foo 将返回 true 或 false。

于 2014-03-31T19:59:29.677 回答