我正在编写一个简短的递归函数,以列表作为输入并输出Bool。 (我是haskell初学者)到目前为止,我可以检测到第一个元素是否为3,但是我不确定如何使用递归检查列表的其余部分。
func :: [Int] -> Bool
func [] = False
func (x:xs)
| (x == 3) = True
| otherwise = False
答案 0 :(得分:4)
我也是Haskell的新手。
对您的代码稍作更改,就可以将其重写为
func :: [Int] -> Bool
func [] = False
func (x:xs)
| x == 3 = True
| otherwise = func xs
解释:
如果您接受一些更改,我可以建议使用OR(并在惰性评估的帮助下)实施。
func :: [Int] -> Bool
func [] = False
func (x:xs) = x==3 || func xs
它实际上与上面的代码相同,但是行数较少。
最后,我想向您介绍elem
函数,它的作用是:获取元素和列表,如果a在列表中,则返回True,否则返回False。
这正是我们想要的,所以我写:
containsThree :: [Int] -> Bool
containsThree = elem 3
还请注意,我使用了无点样式,如果您不熟悉,则第二行与以下内容相同:
containsThree xs = elem 3 xs
祝你学习Haskell好运。