Syz*_*orr 2 recursion haskell list-comprehension
这是教程分配的一小部分,我们被要求首先使用列表推导定义函数,然后使用显式递归.
- 使用列表推导,定义一个函数
duplicated :: Eq a => a - > [a] - > Bool
获取列表元素和列表,如果列表中有多个列表元素副本,则返回True.例如:
重复10 [1,2,11,11] =假
重复10 [1,2,10,11] =假
重复10 [1,2,10,10] =真
为此,我有以下代码:
duplicated::Eq a => a -> [a] -> Bool
duplicated n xs = length[x | x <- xs, x == n] > 1
Run Code Online (Sandbox Code Playgroud)
但无论我如何攻击这个,我都无法通过显式递归找到一种方法.
这是使用显式递归的方法:
duplicated :: Eq a => a -> [a] -> Bool
duplicated _ [] = False
duplicated n (x:xs) = callback n xs
where callback = if x == n then elem else duplicated
Run Code Online (Sandbox Code Playgroud)
以下是它的工作原理:
n在列表中找不到一个元素.因此,我们回来了False.n则意味着我们找到了一个元素n.因此,我们返回elem n xs,检查是否n是在xs为好.duplicated n xs.希望有所帮助.