[英]Explicit Recursion for Determining If Duplicates in Haskell
这只是教程任务的一小部分,我们被要求首先使用列表推导然后使用显式递归来定义函数。
- 使用列表理解,定义一个函数
复制的:: Eq a => a-> [a]-> Bool
它接受一个list元素和一个list,如果列表中有多个list元素,则返回True。 例如:
重复10 [1,2,11,11] = False
重复10 [1,2,10,11] = False
重复10 [1,2,10,10] =真
为此,我有以下代码:
duplicated::Eq a => a -> [a] -> Bool
duplicated n xs = length[x | x <- xs, x == n] > 1
但是,无论我如何看待这种攻击,我都无法找到一种通过显式递归实现此目标的方法。
这是使用显式递归执行的方法:
duplicated :: Eq a => a -> [a] -> Bool
duplicated _ [] = False
duplicated n (x:xs) = callback n xs
where callback = if x == n then elem else duplicated
运作方式如下:
n
。 因此,我们返回False
。 n
则意味着我们找到了一个元素n
。 因此,我们返回elem n xs
,它检查n
是否也在xs
中。 duplicated n xs
。 希望能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.