List 如果x在列表中,则返回true,否则返回False(递归)

List 如果x在列表中,则返回true,否则返回False(递归),list,haskell,List,Haskell,我正在编写一个简短的递归函数,将列表作为输入并输出布尔值。我是haskell初学者,到目前为止,我可以检测第一个元素是否为3,但我不确定如何使用递归检查列表的其余部分 func::[Int]->Bool func[]=False func x:xs |x==3=True |否则=假 我也是哈斯克尔的新手 只要对代码稍加修改,就可以将其重新编写为 func :: [Int] -> Bool func [] = False func (x:xs) | x == 3 = True

我正在编写一个简短的递归函数,将列表作为输入并输出布尔值。我是haskell初学者,到目前为止,我可以检测第一个元素是否为3,但我不确定如何使用递归检查列表的其余部分

func::[Int]->Bool func[]=False func x:xs |x==3=True |否则=假
我也是哈斯克尔的新手

只要对代码稍加修改,就可以将其重新编写为

func :: [Int] -> Bool
func [] = False
func (x:xs)
  | x == 3    = True
  | otherwise = func xs
说明:

如果列表为空:则没有3 如果列表不为空: 如果头是3,那么我们有3 否则我们应该检查列表的其余部分,所以3在列表中的答案等于x在xs中。 如果您接受一个小小的改变,我可以建议通过或和惰性评估的帮助来实现

func::[Int]->Bool func[]=False func x:xs=x==3 | | func xs 它实际上与上面的代码相同,但行数较少

如果head为3,则返回True。 如果head不是3,请检查列表的其余部分。 最后,我想介绍elem函数,它的工作原理是:获取一个元素和一个列表,如果列表中有一个元素,则返回True,否则返回False。 这正是我们想要的,所以我写道:

包含三个::[Int]->Bool 容器三=元素3 还请注意,我使用了无点样式,如果您不熟悉,第二行与:

containsthreexs=元素3xs

幸运学习Haskell .< /P>否则FUNC XSY可以考虑用一点解释来回答你的回答,如果它被接受得很好。我会注意到EELM通常被写为中缀运算符,3’ele'xs,哪种读数更易于理解,比如数学符号3。∈ xs。