haskell 两个列表函数交集有什么问题

hgqdbh6s  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(134)

我想要两个列表之间的交集,但只有当它们在同一位置时才是打印。

inter [] _ = []
inter _ [] = []
inter (x:xs) (y:ys) = if (x == y) then x:inter xs ys else inter xs ys
mw3dktmi

mw3dktmi1#

正如在注解中已经提到的,如果相同的元素出现在两个列表中的相同位置,则您的函数将同时迭代这两个列表,并将元素追加到结果列表中。
根据我的理解,你真正想要做的是把第一个列表中出现在第二个列表中 * 任何地方 * 的所有元素相加,所以你可能想要定义(或使用)另一个函数来检查一个元素是否出现在列表中的某个地方,例如,如果你有一个Int的列表:

elem :: Int -> [Int] -> Bool

或者如果您已经知道什么是类型类:

elem :: Eq a => a -> [a] -> Bool

使用该函数,可以按元素处理第一个列表,并从该列表中筛选出出现在第二个列表中的所有元素。
由于你显然是试图学习Haskell,我不想破坏你的经验,并提供一个更完整的解决方案。

相关问题