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