Haskell:编写一个布尔函数,给出元素是否在列表中
我是Haskell的新手,我正在尝试编写一个函数,如果给定一个整数列表和另一个整数n,无论该整数是否在列表中,它都将返回一个布尔值 于是我写道:Haskell:编写一个布尔函数,给出元素是否在列表中,haskell,hugs,Haskell,Hugs,我是Haskell的新手,我正在尝试编写一个函数,如果给定一个整数列表和另一个整数n,无论该整数是否在列表中,它都将返回一个布尔值 于是我写道: l=[n..m] occurs :: Int -> [Int] ->Bool occurs x l | x `elem` l = True | otherwise = False 但我得到了“unexpected=”或其他语法错误 函数出现编译良好。然而,表达式l=[n..m]是无意义的,除非已经存在n和m的合适定义 您的代码有
l=[n..m]
occurs :: Int -> [Int] ->Bool
occurs x l
| x `elem` l = True
| otherwise = False
但我得到了“unexpected=”或其他语法错误
函数
出现
编译良好。然而,表达式l=[n..m]
是无意义的,除非已经存在n
和m
的合适定义
您的代码有一个更大的问题。请注意,elem::Eq a=>a->[a]->Bool
,它与的类型非常类似,尤其是考虑到Int
是Eq
的一个实例
此外,您对发生的定义中的l
与上面一行中的l=[m..n]
不同。ocurses
中的l
是一个自由变量,在调用ocurses
时绑定到某个值。函数ocurses
编译良好。然而,表达式l=[n..m]
是无意义的,除非已经存在n
和m
的合适定义
您的代码有一个更大的问题。请注意,elem::Eq a=>a->[a]->Bool
,它与的类型非常类似,尤其是考虑到Int
是Eq
的一个实例
此外,您对发生的定义中的l
与上面一行中的l=[m..n]
不同。ocurses
中的l
是一个自由变量,在调用ocurses
时绑定到某个值。如果我很好地理解你的问题,理想的函数本质上是elem
foo :: Eq a => a -> [a] -> Bool
foo x l = x `elem` l
foo将返回true或false 如果我能很好地理解你的问题,理想的功能本质上是elem
foo :: Eq a => a -> [a] -> Bool
foo x l = x `elem` l
foo将返回true或false 你的函数可以编译。您能把完整的错误信息包括进来吗?这意味着ocurses=elem
对吗?所以你什么都没做。“但是我得到了‘unexpected=`或其他什么’的语法错误。”。请不要像这样发布问题的描述,而是花时间键入问题的详细描述以及错误消息的全文。您是否检查了您的空白是否一致?确保您的代码中没有使用任何选项卡,因为这样可以使编辑器中的内容看起来正确,但对GHC来说不正确。这是我得到的错误的快照。实际上,我在代码中使用了制表符,因为我不知道如何在不执行代码的情况下“跳行”。最后,我用的是WinHugs。抱歉没有在前面包含此信息。您的函数已编译。您能把完整的错误信息包括进来吗?这意味着ocurses=elem
对吗?所以你什么都没做。“但是我得到了‘unexpected=`或其他什么’的语法错误。”。请不要像这样发布问题的描述,而是花时间键入问题的详细描述以及错误消息的全文。您是否检查了您的空白是否一致?确保您的代码中没有使用任何选项卡,因为这样可以使编辑器中的内容看起来正确,但对GHC来说不正确。这是我得到的错误的快照。实际上,我在代码中使用了制表符,因为我不知道如何在不执行代码的情况下“跳行”。最后,我用的是WinHugs。很抱歉没有在前面包含这些信息。你也可以只写foo=elem
绝对这就是为什么我说“本质就是元素”,提供的答案只是为了展示元素的神秘性。你也可以只写foo=elem
绝对这就是为什么我说“本质就是元素”,所提供的答案只是为了说明元素的麦加主义。