Haskell实现listCheck函数:判断两个字符串列表是否存在共同元素
解决方案:Haskell listCheck 函数实现
现有代码问题
你当前的代码只对第二个参数为单元素列表的情况做了模式匹配,没有覆盖第二个列表长度大于1的场景,因此无法处理通用情况。
实现方案
方案1:使用内置elem函数简化实现
直接借助Haskell标准库的elem函数判断元素是否存在于列表中,逻辑简洁清晰:
listCheck :: [[Char]] -> [[Char]] -> Bool listCheck [] _ = False listCheck _ [] = False listCheck (x:xs) ys = elem x ys || listCheck xs ys
逻辑说明:遍历第一个列表的每个元素,只要有任意一个元素存在于第二个列表中,就返回True;遍历完第一个列表所有元素都没匹配到则返回False。
方案2:纯手动递归实现(不依赖内置函数)
如果需要完全手写递归逻辑,不使用内置elem,可以通过嵌套递归实现元素匹配:
listCheck :: [[Char]] -> [[Char]] -> Bool listCheck [] _ = False listCheck _ [] = False listCheck (x:xs) ys = matchY x ys || listCheck xs ys where matchY _ [] = False matchY target (y:ys) | target == y = True | otherwise = matchY target ys
逻辑说明:
- 外层递归遍历第一个列表的每个元素
- 内层
matchY递归遍历第二个列表,判断当前第一个列表的元素是否能在第二个列表中匹配到 - 只要有任意一个元素匹配成功就返回True,全部匹配失败返回False
测试验证
两个方案都可以正确通过示例用例:
listCheck ["hey", "hello", "hi"] ["whatsup", "hi"]→ 返回TruelistCheck ["hey", "hello", "hi"] ["whatsup"]→ 返回False- 空列表边界场景也符合要求:任意参数为空时返回
False
内容的提问来源于stack exchange,提问作者BeanieBarrow
相关产品推荐
相关产品推荐

