我想要两个列表之间的交集,但只有当它们在同一位置时才是打印。
inter [] _ = [] inter _ [] = [] inter (x:xs) (y:ys) = if (x == y) then x:inter xs ys else inter xs ys
mw3dktmi1#
正如在注解中已经提到的,如果相同的元素出现在两个列表中的相同位置,则您的函数将同时迭代这两个列表,并将元素追加到结果列表中。根据我的理解,你真正想要做的是把第一个列表中出现在第二个列表中 * 任何地方 * 的所有元素相加,所以你可能想要定义(或使用)另一个函数来检查一个元素是否出现在列表中的某个地方,例如,如果你有一个Int的列表:
Int
elem :: Int -> [Int] -> Bool
或者如果您已经知道什么是类型类:
elem :: Eq a => a -> [a] -> Bool
使用该函数,可以按元素处理第一个列表,并从该列表中筛选出出现在第二个列表中的所有元素。由于你显然是试图学习Haskell,我不想破坏你的经验,并提供一个更完整的解决方案。
1条答案
按热度按时间mw3dktmi1#
正如在注解中已经提到的,如果相同的元素出现在两个列表中的相同位置,则您的函数将同时迭代这两个列表,并将元素追加到结果列表中。
根据我的理解,你真正想要做的是把第一个列表中出现在第二个列表中 * 任何地方 * 的所有元素相加,所以你可能想要定义(或使用)另一个函数来检查一个元素是否出现在列表中的某个地方,例如,如果你有一个
Int
的列表:或者如果您已经知道什么是类型类:
使用该函数,可以按元素处理第一个列表,并从该列表中筛选出出现在第二个列表中的所有元素。
由于你显然是试图学习Haskell,我不想破坏你的经验,并提供一个更完整的解决方案。