这是教程分配的一小部分,我们被要求首先使用列表推导定义函数,然后使用显式递归。
- 使用列表推导,定义一个函数
醇>重复:: Eq a => a - > [a] - >布尔
获取列表元素和列表,如果列表中有多个列表元素副本,则返回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
但无论我怎么解决这个问题,我都无法通过显式递归找到一种方法。
答案 0 :(得分:5)
这是使用显式递归的方法:
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
。希望有所帮助。